我有一个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这样的事情
答案 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函数,该函数返回
答案 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