Обрабатывать нулевое поле как ноль для запроса на обновление
Я использую конструктор запросов SQL Express 2010. Мне нужно иметь возможность увеличивать поле.
В моем коде позади я звоню, например:
tableAdapter.IncrementLikeCount(id);
Если я просто использую приращение, поле like может быть пустым, поэтому я хочу либо a. обрабатывать ноль как ноль в этом поле ИЛИ b. установить в 1, если ноль, и увеличить в противном случае.
Самое последнее, что я попробовал - это вариант b со следующим кодом в построителе запросов:
UPDATE [dbo].[myTable]
SET [LikeCount] = IIF(ISNULL([LikeCount]), 1, LikeCount + 1)
WHERE ([ID] = @Original_ID)
Однако это не работает. Построитель запросов продолжает переписывать выражение внутри ISNULL без квадратных скобок и запятой, как показано ниже:
UPDATE [dbo].[myTable]
SET [LikeCount] = IIF(ISNULL(LikeCount,), 1, LikeCount + 1)
WHERE ([ID] = @Original_ID)
Есть ли чистый, простой способ сделать это?
1 ответ
Для оператора ISNULL необходимо использовать значение по умолчанию, например
ISNULL(LikeCount, 0)
где 0 - это значение, которое LikeCount становится IF, фактически оно является нулевым.
Так что постарайтесь
UPDATE [dbo].[myTable]
SET [LikeCount] = (ISNULL(LikeCount, 0) + 1)
WHERE ([ID] = @Original_ID)
ОБНОВИТЬ
Что касается запроса, который вы разместили в своем комментарии:
UPDATE Documents
SET docLikeCount = ISNULL(docLikeCount, 0) + 1
WHERE docID = @Original_docID