我有一张桌子:
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.