SQL Server UPDATE SET CASE错误

时间:2018-07-25 02:18:10

标签: sql-server

UPDATE importing.table 
SET SheetName = CASE  
                   WHEN SheetName= 'balance_currency' 
                      THEN 'TY_balance_currency'
                   WHEN SheetName = 'rate_code' 
                      THEN 'TY_rate_code'
                END

当我两次运行此代码时,除此代码中指定的SheetName之外,整个列SheetName都为空。当我只想更新此代码中指定的SheetName时,如何防止这种情况发生?

谢谢

2 个答案:

答案 0 :(得分:3)

除了在case语句中指定的2之外,还有另一个工作表名称值。因此,除了那两个值之外,它都设置为NULL

如果您只想更改那2,则可以添加WHERE子句

UPDATE importing.table 
SET SheetName = CASE  
                WHEN SheetName= 'balance_currency' THEN 'TY_balance_currency'
                WHEN SheetName = 'rate_code' THEN 'TY_rate_code'
                END
WHERE SheetName in ('balance_currency', 'rate_code')

或添加一个ELSE

UPDATE importing.table 
SET SheetName = CASE  
                WHEN SheetName= 'balance_currency' THEN 'TY_balance_currency'
                WHEN SheetName = 'rate_code' THEN 'TY_rate_code'
                ELSE SheetName
                END

注意:选项1效率更高,因为它仅更新您需要的行,而不影响其他行

答案 1 :(得分:0)

您可以根据需要使用Replace

UPDATE importing.table
set SheetName = replace(replace(SheetName,'balance_currency','TY_balance_currency'),'rate_code','TY_rate_code')