首页 文章

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

提问于
浏览
12

我有一个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 回答

  • 24

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

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

    以下应该有效:

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

    它使用返回的SQL Server ISNULL函数

    • 如果它是非null的第一个值,

    • 或者,否则,第二个值(在这种情况下,是行的当前值) .

  • 4

    您可以使用 isnull 函数:

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

    使用isnull round将列设置为等于它自己将其设置为您的参数 .

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

相关问题