SQL: Как мога да актуализирам стойност в колона само ако тази стойност е нула?

Имам SQL въпрос, който може да е основен за някои, но ме обърква.

Ето пример за имена на колони за таблица „Person“: PersonalID, FirstName, LastName, Car, HairColour, FavDrink, FavFood

Да кажем, че въвеждам реда:

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

Сега искам да актуализирам стойностите за този човек, но само ако новата стойност не е нула, Актуализиране:

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

Новият ред трябва да бъде:

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

Така че си помислих нещо от рода на:

Актуализирайте Person(PersonalID, FirstName, LastName, Car, HairColour, FavDrink, FavFood) set Car = @Car (където @Car не е null), HairColour = @HairColour (където @HairColour...)... и т.н.

Единственото ми безпокойство е, че не мога да групирам всички условия в края на заявката, защото ще изисква всички стойности да имат едно и също условие. Не мога ли да направя нещо като Update HairColour, ако @HairColour не е Null


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)


Id използва 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

Задайте колоната равна на самата себе си с isnull около нея, като я зададете на вашия параметър.

UPDATE
    YourTable
SET
   YourColumn = ISNULL(YourColumn, @yourParameter)
WHERE
    ID = @id
person Robin Day    schedule 20.04.2010
comment
Не това беше въпросът. Цитат: актуализирайте стойностите за този човек, но само ако новата стойност не е нула - person Heinzi; 20.04.2010