SQL: Как я могу обновить значение в столбце, только если это значение равно нулю? - PullRequest
12 голосов
/ 20 апреля 2010

У меня есть вопрос SQL, который может быть основным для некоторых, но меня смущает.

Вот пример имен столбцов для таблицы «Персона»: PersonalID, FirstName, LastName, Автомобиль, Цвет волос, FavDrink, FavFood

Допустим, я ввел строку:

121312, Райна, Питерсон, BMW123d, Коричневый, NULL, NULL

Теперь я хочу обновить значения для этого человека, но только если новое значение не равно NULL, Обновление:

121312, Райна, Питерсон, NULL, Блондинка, Фанта, NULL

Новая строка должна быть:

121312, Райна, Питерсон, BMW123d, Блондин, Фанта, NULL

Так что я думал что-то вроде:

Обновление лица (PersonalID, FirstName, LastName, Car, HairColour, FavDrink, FavFood) установить Car = @Car (где @Car не ноль), HairColour = @HairColour (где @HairColour ...) ... и т. Д.

Меня беспокоит только то, что я не могу сгруппировать все условия в конце запроса, потому что для всех значений потребуется одинаковое условие. Не могу ли я сделать что-то вроде обновления HairColour, если @HairColour не равно Null

Ответы [ 4 ]

24 голосов
/ 20 апреля 2010

Id использует coalesce для этого: http://msdn.microsoft.com/en-us/library/ms190349.aspx

update Person
set Car = coalesce(@Car, Car), HairColour = coalesce(@HairColour, HairColour)
13 голосов
/ 20 апреля 2010

Должно работать следующее:

UPDATE Person
   SET Car = ISNULL(@Car, Car),
       HairColour = ISNULL(@HairColour, HairColour),
       ...

Используется функция SQL Server ISNULL , которая возвращает

  • первое значение, если оно не равно нулю,
  • или, в противном случае, второе значение (которое в данном случае является текущим значением строки).
4 голосов
/ 20 апреля 2010

Вы можете использовать функцию isnull:

update Person
set
  Car = isnull(@Car, Car),
  HairColour = isnull(@HairColour, HairColour),
  FavDrink = isnull(@FavDrink, FavDrink),
  FavFood = isnull(@FavFood, FavFood)
where PersonalID = @PersonalID
2 голосов
/ 20 апреля 2010

Установите столбец, равный самому себе, с нулем вокруг него, установив его в качестве параметра.

UPDATE
    YourTable
SET
   YourColumn = ISNULL(YourColumn, @yourParameter)
WHERE
    ID = @id
...