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 / empty字符串并相应地生成更新查询以实现此目的?
答案 0 :(得分: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则使用它,否则使用第二个值。
See MSDN for more information on ISNULL
<强>更新强>
我刚刚注意到你的评论,最后谈到空字符串......
如何检查null / empty字符串并相应地生成更新查询以实现此目的?
在这种情况下,您可以执行以下操作...
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,否则返回第一个值。
答案 1 :(得分: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 = ...
答案 2 :(得分:0)
仅检查Null,而不是空字符串:
UPDATE
tableX
SET
Col1 = COALESCE(@Attached_File1, Col1),
...
Col5 = COALESCE(@Attached_File5, Col5)
WHERE
Solution_id = @Ticket_ID ;
答案 3 :(得分: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