SQL: как я могу обновить значение в столбце, только если это значение равно null?

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

Вот пример имен столбцов для таблицы "Человек": PersonalID, FirstName, LastName, Car, HairColour, FavDrink, FavFood

Скажем, что я ввожу строку:

121312, Rayna, Pieterson, BMW123d, Brown, NULL, NULL

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

121312, Rayna, Pieterson, NULL, Blonde, Fanta, NULL

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

121312, Rayna, Pieterson, BMW123d, Блондинка, Фанта, NULL

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

Обновить персонаж (PersonalID, FirstName, LastName, Car, HairColour, FavDrink, FavFood) set Car = @Car (где @Car не является нулевым), HairColour = @HairColour (где @HairColour...)... и т.д.

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

Ответ 2

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

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

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

  • первое значение, если оно не равно null,
  • или, в противном случае, второе значение (которое в данном случае является текущим значением строки).

Ответ 3

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

update Person
set
  Car = isnull(@Car, Car),
  HairColour = isnull(@HairColour, HairColour),
  FavDrink = isnull(@FavDrink, FavDrink),
  FavFood = isnull(@FavFood, FavFood)
where PersonalID = @PersonalID

Ответ 4

Установите столбец, равный самому себе, с помощью isnull round, установив его в ваш параметр.

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