用于更新输入参数不为空的表列的SQL查询?

时间:2012-03-22 11:42:51

标签: sql sql-server

我有一张包含以下列的表格。

Ticket_id (Primary key, Int)
Attachment1 (varchar)
Attachment2 (varchar)
Attachment3 (varchar)
Attachment4 (varchar)
Attachment5 (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”,null,null,null]并且输入参数是(10,null,null,“ccc”,“ddd”,null )然后在更新后该行将变为[10,“aaa”,“bbb”,“ccc”,“ddd”,null]

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

4 个答案:

答案 0 :(得分:5)

您可以使用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

此解决方案不会使用new覆盖现有值。如果你想这样做,你应该切换值:

ISNULL(@Attached_File1, Attachment1)

答案 1 :(得分:2)

你可以试试这个:

update MY_TABLE set Attached_File1 = ISNULL(@parameter1, Attached_File1);

答案 2 :(得分:1)

你可以简单地说;

SET 
   AttachmentX = ISNULL(AttachmentX, @Attached_FileX)

或者如果params可以是空字符串

   AttachmentX = ISNULL(AttachmentX, NULLIF(@Attached_FileX, ''))

答案 3 :(得分:1)

UPDATE语句中,您可以使用COALESCE语句,例如:

SET Attachment1 = COALESCE(@Attached_File1, Attachment1)

如果@Attached_File1NULL,那么Attachment1的当前值将有效保持不变。