加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读