2016-06-27 3 views
0

私は約17のフィールドを持つテーブルを持っています。私はこの表で頻繁に更新する必要があります。しかし、問題は私がいくつかのフィールドだけを更新するたびに発生します。このようなシナリオで更新クエリを書くための最良の方法は何ですか?私は値がnullでない場合にのみ更新されるオプションを探しています。SQLクエリがnullでない場合は、更新または同じデータを保持する

たとえば、私はデータベースA、B、C、Dに4つのフィールドを持っています。ユーザーはDの値を更新します。その他の値はすべて同じです。ですから、Dの値だけを更新して他のものを変更せずに更新する更新クエリが必要です。だから、もし私がaとbとcをnullとdをユーザーが指定した値に置き換えると、dの値をa、b、cがnullに更新する更新クエリを書きたいと思う。 MsSQLが2012を使用すると、アプリケーションからこれを呼び出している場合は、最も簡単な方法は、ちょうどあなたがしたいクエリを実行することです

答えて

1

この

Update T 
SET A = CASE WHEN A IS NOT NULL THEN 'Value' ELSE A END, 
    B = CASE WHEN B IS NOT NULL THEN 'Value' ELSE B END, 
    C = CASE WHEN C IS NOT NULL THEN 'Value' ELSE C END 
    D = CASE WHEN D IS NOT NULL THEN 'Value' ELSE D END 
FROM Table1 T 
+0

ときELSE何が起こりますか?ヌル値が更新されるか、既存の値が保持されますか? –

+0

それ以外の場合は、既存の値が維持されることを意味します。 - @Selva –

+1

はうまくいきます...とても親友です@Vignesh Kumar –

1

私のデータベースです:

update t 
    set d = @d 
    where id = @id; 

あなたは一般的な文をしたい場合は、あなたが使用することができます:

update t 
    set a = coalesce(@a, a), 
     b = coalesce(@b, b), 
     c = coalesce(@c, c), 
     d = coalesce(@d, d) 
    where id = @id; 
0

ようなものになることがありますuの可能性ISNULL

CREATE PROCEDURE dbo.T_Update 
    @ID INT, 
    @A VARCHAR(50) = NULL, 
    @B VARCHAR(50) = NULL, 
    @C VARCHAR(50) = NULL, 
    @D VARCHAR(50) = NULL 
AS 
BEGIN 
    UPDATE dbo.T 
    SET  A = ISNULL(@A, A), 
      B = ISNULL(@B, B) 
      C = ISNULL(@C, C) 
      D = ISNULL(@D, D) 
    WHERE ID = @ID; 

END 

と一緒にSE NULL可能なパラメータは、その後、あなただけの更新が必要な列を渡す必要があります。例えば

EXECUTE dbo.T_Update @ID = 1, @D = 'Test'; 

または代わりに、あなただけのNULLを渡すことができます。

EXECUTE dbo.T_Update 1, NULL, NULL, NULL, 'Test'; 
+0

ISNULLは(@ A、A)を意味するときどうなりますか?ヌル値が更新されるか、既存の値が保持されますか? –

関連する問題