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

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

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

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

121312, Райна, Питерсон, BMW123d, Коричневый, НУЛЬ, НУЛЬ

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

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

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

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

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

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

Меня беспокоит только то, что я не могу сгруппировать все условия в конце запроса, потому что для этого потребуется, чтобы все значения имели одно и то же условие. Разве я не могу сделать что-то вроде «Обновить цвет волос», если @HairColour не равно нулю?


person Tamara JQ    schedule 20.04.2010    source источник
comment
Ух ты: 5 минут молчания, потом 4 человека одновременно отвечают на одно и то же. :-)   -  person Heinzi    schedule 20.04.2010
comment
Ха-ха, я знаю, что это здорово, не так ли.   -  person Tamara JQ    schedule 21.04.2010


Ответы (4)


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

update Person
set Car = coalesce(@Car, Car), HairColour = coalesce(@HairColour, HairColour)
person Fabian    schedule 20.04.2010
comment
Ссылка на MySQL: dev.mysql.com/doc/refman /5.0/en/ - person dnagirl; 20.04.2010
comment
Большое спасибо за Вашу помощь. Я думал об использовании этой функции, но не мог понять, как именно она работает. Ура, работает мечта - person Tamara JQ; 21.04.2010

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

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

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

  • первое значение, если оно не равно нулю,
  • или, в противном случае, второе значение (которое в данном случае является текущим значением строки).
person Heinzi    schedule 20.04.2010
comment
Это также работает так же хорошо, как и использование coalesce. Спасибо за вашу помощь. Извините, я принял другой ответ, поскольку они ответили первыми. - person Tamara JQ; 21.04.2010

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

update Person
set
  Car = isnull(@Car, Car),
  HairColour = isnull(@HairColour, HairColour),
  FavDrink = isnull(@FavDrink, FavDrink),
  FavFood = isnull(@FavFood, FavFood)
where PersonalID = @PersonalID
person Guffa    schedule 20.04.2010

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

UPDATE
    YourTable
SET
   YourColumn = ISNULL(YourColumn, @yourParameter)
WHERE
    ID = @id
person Robin Day    schedule 20.04.2010
comment
Вопрос был не в этом. Цитата: обновите значения для этого человека, но только если значение new не равно нулю - person Heinzi; 20.04.2010