首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >sql server update查询中的if条件

sql server update查询中的if条件
EN

Stack Overflow用户
提问于 2013-09-08 18:06:21
回答 5查看 161.1K关注 0票数 31

我有一个SQL服务器表,其中有2列,我希望根据发送给存储过程的标志和新值一起更新它们的值,如下所示:

代码语言:javascript
复制
UPDATE
    table_Name

SET
    CASE
        WHEN @flag = '1' THEN column_A += @new_value
        WHEN @flag = '0' THEN column_B += @new_value
    END AS Total

WHERE
    ID = @ID

正确的SQL server代码是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-09-08 18:15:24

目前的答案很好,应该可以工作,但是更简单、更明显和更可维护的答案有什么问题:

代码语言:javascript
复制
IF @flag = 1
    UPDATE table_name SET column_A = column_A + @new_value WHERE ID = @ID;
ELSE
    UPDATE table_name SET column_B = column_B + @new_value WHERE ID = @ID;

尽管这是一个非常简单的查询,但阅读起来要容易得多。

这是一个由@snyder提供的工作示例:SqlFiddle

票数 25
EN

Stack Overflow用户

发布于 2013-09-08 18:09:40

像这样的东西应该是有效的:

代码语言:javascript
复制
UPDATE
    table_Name
SET 
  column_A = CASE WHEN @flag = '1' THEN column_A + @new_value ELSE column_A END,
  column_B = CASE WHEN @flag = '0' THEN column_B + @new_value ELSE column_B END
WHERE
    ID = @ID
票数 38
EN

Stack Overflow用户

发布于 2013-09-08 18:10:42

由于您使用的是SQL 2008:

代码语言:javascript
复制
UPDATE
    table_Name

SET
    column_A  
     = CASE
        WHEN @flag = '1' THEN @new_value
        ELSE 0
    END + column_A,

    column_B  
     = CASE
        WHEN @flag = '0' THEN @new_value
        ELSE 0
    END + column_B 
WHERE
    ID = @ID

如果您使用的是SQL 2012:

代码语言:javascript
复制
UPDATE
    table_Name
SET
    column_A  = column_A + IIF(@flag = '1', @new_value, 0),
    column_B  = column_B + IIF(@flag = '0', @new_value, 0)
WHERE
    ID = @ID
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18682515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档