T-SQL条件UPDATE(v2)

前端之家收集整理的这篇文章主要介绍了T-SQL条件UPDATE(v2)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一张桌子:
Message (MessageID int,Subject nvarchar(100),Body nvarchar(max))

在UI上更新消息后,我调用一个存储过程来更新该表.在某些情况下,用户可能会更新只是主体,在其他情况下只是身体.我想要这个存储过程只更新更改的内容,所以我还传递标志,显示主题或正文是否已被更新:

create proc UpdateMessage(
  @MessageID int,@Subject nvarchar(100),@Body nvarchar(max),@SubjectChanged bit,@BodyChanged bit)

现在我很困惑如何构建条件UPDATE语句.我的第一个想法是使用CASE:

Update [Message] 
SET 
CASE WHEN @SubjectChanged = 1 THEN [Subject] = @Subject ELSE 1=1 END,CASE WHEN @BodyChanged = 1 THEN Body = @Body ELSE 1=1 END,WHERE MessageID = @MessageID

…但是这似乎不是正确的语法,因为CASE必须是分配的右侧.

任何想法我该怎么做? (请记住,实际上有6个参数可以更新,而不是两个)

谢谢!
安德烈

解决方法

创建语句所需的语法是:
Update [Message] 
SET    [Subject] = CASE WHEN @SubjectChanged = 1 THEN @Subject ELSE [Subject] END,Body = CASE WHEN @BodyChanged = 1 THEN @Body ELSE Body END
WHERE  MessageID = @MessageID

如果你仍然想坚持下去,所有的建议.

注:如果您省略了CASE语句的ELSE [Subject]部分,而不是忽略UPDATE,则将该字段设置为NULL.

猜你在找的MsSQL相关文章