web-dev-qa-db-ja.com

SQLストアドプロシージャ:変数がnullでない場合、ステートメントを更新します

ストアドプロシージャには、一般的に次のような更新ステートメントがあります。

Update [TABLE_NAME]
Set XYZ=@ABC

変数がnullまたは値-1でない場合にのみ更新ステートメントをトリガーする良い方法はありますか?

IF NOT EXISTS...INSERT 質問。

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

22
Jake

T-SQL IFを使用します。

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

MSDNドキュメント をご覧ください。

42
James Hill

多くの更新がある場合の別のアプローチは、COALESCEを使用することです。

UPDATE [DATABASE].[dbo].[TABLE_NAME]
SET    
    [ABC]  = COALESCE(@ABC, [ABC]),
    [ABCD] = COALESCE(@ABCD, [ABCD])
25
Adam Caviness

さらに別のアプローチはISNULL()です。

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

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

select COALESCE(null, null, 1, 'two') --returns 1
select COALESCE(null, null, null, 'two') --returns 'two'
0
Thomas Hansen