SQL:如果该值为null,如何更新列上的值?

时间:2010-04-20 14:35:18

标签: mysql sql sql-server sql-update where-clause

我有一个SQL问题可能是某些人的基本问题,但令我感到困惑。

以下是表'Person'的列名称示例: PersonalID,FirstName,LastName,Car,HairColour,FavDrink,FavFood

假设我输入了行:

  

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

现在我想更新此人的值,但仅当新值不为null时,更新:

  

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

新行必须是:

  

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

所以我想的是:

  

更新人物(PersonalID,FirstName,LastName,Car,HairColour,   FavDrink,FavFood)设置Car = @ Car(其中@Car不为空),HairColour   = @HairColour(其中@HairColour ......)......等等。

我唯一担心的是我无法在查询结束时对所有条件进行分组,因为它将要求所有值具有相同的条件。如果@HairColour不是Null,我不能做像Update HairColour这样的事情

4 个答案:

答案 0 :(得分:24)

Id使用coalesce: http://msdn.microsoft.com/en-us/library/ms190349.aspx

update Person
set Car = coalesce(@Car, Car), HairColour = coalesce(@HairColour, HairColour)

答案 1 :(得分:13)

以下内容应该有效:

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

它使用SQL Server ISNULL函数,该函数返回

  • 第一个值,如果它是非null,
  • 或者,否则,第二个值(在这种情况下,是行的当前值)。

答案 2 :(得分:4)

您可以使用isnull功能:

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

答案 3 :(得分:2)

将列设置为等于自身,并使用isnull round将其设置为参数。

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