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

12

У меня есть вопрос 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

  • 0
    Ничего себе: 5 минут молчания, затем 4 человека отвечают на одно и то же время одновременно. :-)
  • 0
    Хаха, я знаю, это здорово, не правда ли?
Теги:
sql-server
sql-update
where-clause

4 ответа

24
Лучший ответ

Для использования Id используется объединение: http://msdn.microsoft.com/en-us/library/ms190349.aspx

update Person
set Car = coalesce(@Car, Car), HairColour = coalesce(@HairColour, HairColour)
  • 1
    Ссылка на MySQL: dev.mysql.com/doc/refman/5.0/en/…
  • 0
    Большое спасибо за Вашу помощь. Я думал об использовании этой функции, но не мог понять, как она работает точно. Ура работает мечта
13

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

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

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

  • первое значение, если оно не равно null,
  • или, в противном случае, второе значение (которое в данном случае является текущим значением строки).
  • 0
    Это также работает так же хорошо, как и слияние. Спасибо за вашу помощь. Извините, я принял другой ответ, поскольку они ответили первыми.
4

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

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

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

UPDATE
    YourTable
SET
   YourColumn = ISNULL(YourColumn, @yourParameter)
WHERE
    ID = @id
  • 0
    Вопрос не в этом. Цитата: «Обновите значения для этого человека, но только если новое значение не равно нулю»

Ещё вопросы

Сообщество Overcoder
Наверх
Меню