在SQL Server中使用CASE语句更新多个列

7

我想使用case语句更新表格,查询语句如下...

select case(@columnname) when 'name1' then 
                                  begin
                                     update table
                                      set 
                                       pay1=pay1* 100
                                       pay2=pay2*20
                                       pay3=pay3* 100
                                  end
                        when 'name2' then 
                                       begin
                                     update table
                                      set 
                                       pay2=pay2*20
                                       pay3=pay3* 100
                                  end

                         when 'name3' then 
                                       begin
                                     update table
                                      set 
                                       pay3=pay3* 100
                                  end
                  end

请问您能否告诉我使用case语句完成查询的正确逻辑?


T-SQL中的CASE是一个表达式,用于返回多个值中的一个 - 它不是像C#或VB.NET中的程序流控制语句 - 你不能根据条件执行一段代码块。 - marc_s
4个回答

10

你需要交换语法。case语句将适用于您想要更新的每个值...

UPDATE table SET
    pay1 = CASE WHEN @columnname IN('name1') THEN pay1 * 100 ELSE pay1 END,
    pay2 = CASE WHEN @columnname IN('name1', 'name2') THEN pay2 * 20 ELSE pay2 END,
    pay3 = CASE WHEN @columnname IN('name1', 'name2', 'name3') THEN pay3 * 100 ELSE pay3 END

看起来您实际想要的是一个if语句...

IF @columnname = 'name1'
    UPDATE table SET pay1 = pay1 * 100, pay2=pay2*20, pay3=pay3* 100

ELSE IF @ColumnName = 'name2'
    UPDATE table SET pay2 = pay2 * 20, pay3 = pay3 * 100

ELSE IF @ColumnName = 'name3'
    UPDATE table SET pay3 = pay3 * 100

希望这有所帮助。


0
请使用这个。
  update table
               set pay1 = CASE WHEN @columnname = 'name1' 
                               THEN pay1* 100 
                               ELSE pay1
               set pay2 = CASE WHEN @columnname = 'name1' 
                                      OR @columnname = 'name2' 
                                THEN pay2* 20 
                                ELSE pay2
               set pay3 = CASE WHEN @columnname = 'name1' OR 
                                    @columnname = 'name2' OR 
                                    @columnname = 'name3' 
                                THEN pay3 * 100 
                                ELSE pay3

0
你可以使用类似这样的代码:
UPDATE DBO.Test1
  SET val1=
   CASE name 
    WHEN 'name1' THEN val1*100 
    ELSE val1
   END,
  val2=
   CASE name 
    WHEN 'name1' THEN val2*20 
    WHEN 'name2' THEN val2*20
    ELSE val2
   END,
  val3=
   CASE name 
    WHEN 'name1' THEN val3*100 
    WHEN 'name2' THEN val3*100
    WHEN 'name3' THEN val3*100
    ELSE val3
   END;

我已经使用了不同的'When'子句来更新val3。由于所有情况下要更新的值都相同,因此您可以使用单个'WHEN'来更新val3。


-1
注意:在更新语句中不要使用 SWITCH CASE。
每次想要更新时,请编写单个查询。如果您想自动化编写查询的过程,请使用 Excel 表格来连接表达式并创建查询,然后运行它们。
SWITCH CASE 最适用于 SELECT 语句。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接