我有一张桌子,下面有一列.
Ticket_id (Primary key, Int)
Attachment1 (varchar)
Attachment2 (varchar)
Attachment3 (varchar)
Attachment4 (varchar)
Attachment5 (varchar)
Run Code Online (Sandbox Code Playgroud)
我正在编写一个存储过程来更新此表.上述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
Run Code Online (Sandbox Code Playgroud)
我想编写一个sql查询,它将使用输入参数中指定的值更新表.但我不能用null覆盖附件列.我的意思是我只需要使用那些包含数据的参数.
例如,如果表有一行[10,"aaa","bbb",null,null,null]并且输入参数是(10,null,null,"ccc","ddd",null)那么之后更新行将变为[10,"aaa","bbb","ccc","ddd",null]
如何检查null/empty字符串并相应地生成更新查询以实现此目的?
你可以使用ISNULL
UPDATE table_name SET
Attachment1 = ISNULL(Attachment1, @Attached_File1),
Attachment2 = ISNULL(Attachment2, @Attached_File2),
Attachment3 = ISNULL(Attachment3, @Attached_File3),
Attachment4 = ISNULL(Attachment4, @Attached_File4),
Attachment5 = ISNULL(Attachment5, @Attached_File5)
WHERE Ticket_id = @Ticket_ID
Run Code Online (Sandbox Code Playgroud)
此解决方案不会使用new覆盖现有值.如果你想这样做,你应该切换值:
ISNULL(@Attached_File1, Attachment1)
Run Code Online (Sandbox Code Playgroud)