2

多数の列を持つデータベース テーブルがあります。そのテーブルのレコードを更新する T-SQL ストアド プロシージャを作成したいのですが、そのプロシージャを使用してすべての列または特定の列のみを更新し、列の値に 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 を明示的に保存したい場合があり、上記のソリューションではそれができないことです。誰が私に何をすべきか教えてもらえますか?

4

1 に答える 1

2

私たちが使用するアプローチは、非常にうまく機能し、各列に対して 2 つのパラメーターを宣言することです。最初のパラメーターには値が含まれ、2 番目のパラメーターはクエリに null を明示的に挿入するように指示するビットです。例えば

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 を明示的に設定して null を強制するだけです。

于 2012-05-13T13:32:04.850 に答える