2012-05-13 8 views
1

大きな列数のデータベーステーブルがあります。そのテーブルのレコードを更新するT-SQLストアドプロシージャを作成したいと思います。このプロシージャを使用して、すべての列または特定の列のみを更新する場合は、既存の値よりもNULLを渡す必要があります変更する。現在、私は彼らの両方がうまく機能これらSQL Serverテーブルの特定の列を更新し、Null値を無視します。

UPDATE table 
    SET column1 = COALESCE(@param1, column1), 
     column2 = COALESCE(@param2, column2), 
     ... 
    WHERE id = @id 

または

UPDATE table 
set column1 = isnull(@param1,column1), 
     column2 = isnull(@param2,column2) 

のようなソリューションを使用することができ、私の唯一の問題は、私は明示的に任意の列にnullを保存したい場合があると私はそれを行うことはできません上記のソリューション。誰が私に何をすべきか教えてもらえますか?

答えて

2

実際にうまくいくアプローチは、各列に2つのパラメータを宣言することです。最初の値は値を含み、2つ目はヌルを明示的に挿入するように指示するビットです。コードから呼び出すとき例えば

create table example (column1 nvarchar(255), column2 nvarchar(255)) 

create procedure pUpdate(
    @column1 nvarchar(255) = null, 
    @nullColumn1 tinyint = 0, 
    @column2 nvarchar(255) = null, 
    @nullColumn2 tinyint = 0 
    ) as 
    BEGIN 

    update example 
     set column1 = Case When @nullcolumn1 = 1 Then NULL ELSE IsNull(@column1, column1) End 
     set column2 = Case When @nullcolumn2 = 1 Then NULL ELSE IsNull(@column2, column2) End 

    END 

はその後、あなただけを更新する必要、または明示的にヌルを強制的に@nullcolumnを設定知ってパラメータを渡す必要があります。

+0

私はこのソリューションのためにありがとう、それは唯一の問題を実装する非常に簡単なソリューションに見える私たちは更新ストアドプロシージャで非常に多くの余分なパラメータを作成する必要がありますが、これまでのところ、別の解決策が付いてきました。もう一度ありがとう。 – Waqas

関連する問題