2011-08-18 14 views
18

私は、一般的に次のようになりますストアドプロシージャで更新ステートメントを持っている:SQL:変数がNULLでない場合、更新ステートメント

Update [TABLE_NAME] 
Set [email protected] 

は場合にのみ更新文をトリガするための良い方法はあります変数がnullでも値-1でもない

IF NOT EXISTS...INSERTと似ています。

ありがとうございました。

答えて

37

は、T-SQL IFを使用します。

IF @ABC IS NOT NULL AND @ABC != -1 
    UPDATE [TABLE_NAME] SET [email protected] 

MSDN docsを見てみましょう。あなたは多くの更新がある場合

+7

これは簡単ですか?さて、私は電気ソケットにフォークをつけて、アトランティックシティの裏通りや他の馬鹿なものから汚い針をつけるつもりです。ご協力ありがとうございました。 – Jake

+1

@ジェイク、心配はいりません。私たちはすべて私たちの日を持っています。ところで、StackOverflowへようこそ! –

25

別のアプローチは、COALESCEを使用することです:

UPDATE [DATABASE].[dbo].[TABLE_NAME] 
SET  
    [ABC] = COALESCE(@ABC, [ABC]), 
    [ABCD] = COALESCE(@ABCD, [ABCD]) 
+5

これは、私が頭を机の中に打ち込もうとしていたことです。数十の列が関わっているときには、「もし更新された」ペアの束よりもずっと見栄えが良い。 – Herb

+0

どうもありがとうございます。 –

0

さらに別のアプローチは、ISNULL(あります)。

UPDATE [DATABASE].[dbo].[TABLE_NAME] 
SET  
    [ABC] = ISNULL(@ABC, [ABC]), 
    [ABCD] = ISNULL(@ABCD, [ABCD]) 

ISNULLとCOALESCEの違いは戻り値の型です。 COALESCEは2つ以上の引数を取ることができ、最初のものはnullではないものを使用します。私。

select COALESCE(null, null, 1, 'two') --returns 1 
select COALESCE(null, null, null, 'two') --returns 'two' 
関連する問題