web-dev-qa-db-ja.com

SQL:値がnullの場合にのみ、列の値を更新するにはどうすればよいですか?

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

だから私は次のようなことを考えていました:

更新Person(PersonalID、FirstName、LastName、Car、HairColour、FavDrink、FavFood)set Car = @Car(@Carはnullではない)、HairColour = @HairColour(@HairColour ...)...など。

私の唯一の懸念は、すべての値が同じ条件を持つ必要があるため、クエリの最後にすべての条件をグループ化できないことです。 @HairColourがNullでない場合、HairColourを更新するようなことはできません

12
Tamara JQ

これには合体を使用します: http://msdn.Microsoft.com/en-us/library/ms190349.aspx

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

以下が機能するはずです。

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

SQL Server [〜#〜] isnull [〜#〜] 関数を使用します。

  • null以外の場合の最初の値、
  • または、それ以外の場合は、2番目の値(この場合は行の現在の値)。
13
Heinzi

isnull関数を使用できます。

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

列をそれ自体と同じに設定し、isnullを使用して、パラメーターに設定します。

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