2
Solution_id (Primary key, Int)
Col1 (varchar)
Col2 (varchar)
Col3 (varchar)
Col4 (varchar)
Col5 (varchar)

このテーブルを更新するストアド プロシージャを作成しています。上記の 6 つの列には 6 つの入力パラメーターがあります。

@Attached_File1 VARCHAR(MAX),
@Attached_File2 VARCHAR(MAX),
@Attached_File3 VARCHAR(MAX),
@Attached_File4 VARCHAR(MAX),
@Attached_File5 VARCHAR(MAX),
@Ticket_ID BIGINT

入力パラメーターで指定された値でテーブルを更新する SQL クエリを作成したいと考えています。しかし、添付列を null で上書きしてはいけません。つまり、データを含むパラメーターのみを使用する必要があります。

たとえば、テーブルに行がある場合

[10, "aaa", "bbb", "efg", null, null] 

入力パラメータは次のとおりです。

(10, null, null, "mno", "ddd", null) 

更新後、行は次のようになります

[10, "aaa", "bbb", "mno", "ddd", null]

null/空の文字列をチェックし、それに応じて更新クエリを生成してこれを達成する方法は?

4

4 に答える 4

3

これはあなたが求めているようなものですか?

UPDATE mytable
SET Col1 = ISNULL(@Attached_File1, Col1),
    Col2 = ISNULL(@Attached_File2, Col2),
    Col3 = ISNULL(@Attached_File3, Col3),
    Col4 = ISNULL(@Attached_File4, Col4),
    Col5 = ISNULL(@Attached_File5, Col5)
WHERE Solution_id = @Ticket_ID

ISNULL最初の値が null でない場合はそれが使用され、それ以外の場合は 2 番目の値が使用されます。

詳細については、MSDN を参照してください。ISNULL


アップデート

最後に、空の文字列について話しているあなたのコメントに気づきました...

null/空の文字列をチェックし、それに応じて更新クエリを生成してこれを達成する方法は?

その場合、次のことができます...

UPDATE mytable
SET Col1 = ISNULL(NULLIF(@Attached_File1,''), Col1),
    Col2 = ISNULL(NULLIF(@Attached_File2,''), Col2),
    Col3 = ISNULL(NULLIF(@Attached_File3,''), Col3),
    Col4 = ISNULL(NULLIF(@Attached_File4,''), Col4),
    Col5 = ISNULL(NULLIF(@Attached_File5,''), Col5)
WHERE Solution_id = @Ticket_ID

これは、NULLIF2 つの値を取るステートメントを使用します。最初の値が 2 番目の値と同じ場合は NULL が返され、そうでない場合は最初の値が返されます。

詳細については、MSDN を参照してください。NULLIF

于 2012-09-24T16:38:39.617 に答える
2
update  YourTable
set     col1 = isnull(@Attached_File1, col1)
,       col2 = isnull(@Attached_File2, col2)
,       col3 = isnull(@Attached_File3, col3)
,       ...
where   Solution_ID = @Ticket_ID

パラメータに空の文字列を含めることができる場合は、@ freefaller の回答を検討してください。空白を含めることができる場合は、次を試してください。

set     col1 = case 
               when @Attached_File1 like '%[^ \t\r\n]%' then @Attached_File1 
               else col1 
               end
,       col2 = ...
于 2012-09-24T16:38:30.677 に答える
0

私はこれを試してみます:

UPDATE Table
SET
    Col1 = ISNULL(@Attached_File1, Col1),
    Col2 = ISNULL(@Attached_File1, Col2),
    Col3 = ISNULL(@Attached_File1, Col3),
    Col4 = ISNULL(@Attached_File1, Col4),
    Col5 = ISNULL(@Attached_File1, Col5),
WHERE
    Solution_Id = @Ticket_ID
于 2012-09-24T16:40:21.667 に答える
0

空の文字列ではなく、Null のみをチェックします。

UPDATE 
    tableX
SET
    Col1 = COALESCE(@Attached_File1, Col1),
    ...
    Col5 = COALESCE(@Attached_File5, Col5)
WHERE
    Solution_id = @Ticket_ID ;
于 2012-09-24T16:38:35.380 に答える