T-SQL条件UPDATE(v2)
发布时间:2020-12-12 16:42:48 所属栏目:MsSql教程 来源:网络整理
导读:我有一张桌子: Message (MessageID int,Subject nvarchar(100),Body nvarchar(max)) 在UI上更新消息后,我调用一个存储过程来更新该表.在某些情况下,用户可能会更新只是主体,在其他情况下只是身体.我想要这个存储过程只更新更改的内容,所以我还传递标志,显示
我有一张桌子:
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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |