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]

如何检查空/空字符串并相应地生成更新查询以实现此目的?

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取两个值,如果第一个不为空,则使用它,否则使用第二个值。

有关更多信息,请参阅 MSDNISNULL


更新

我刚刚注意到你最后的评论,它谈到了空字符串......

如何检查空/空字符串并相应地生成更新查询以实现此目的?

在这种情况下,您可以执行以下操作...

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

这使用了NULLIF接受两个值的语句,如果第一个值与第二个值相同,则返回 NULL,否则返回第一个值。

有关更多信息,请参阅 MSDNNULLIF

于 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 的答案。如果它可以包含 whitepsace,请尝试:

set     col1 = case 
               when @Attached_File1 like '%[^ \t\r\n]%' then @Attached_File1 
               else col1 
               end
,       col2 = ...
于 2012-09-24T16:38:30.677 回答
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 回答
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 回答