在单个case语句中设置多个字段

时间:2010-10-01 14:01:55

标签: tsql sql-server-2008 case

我对SQL Server 2008并不熟悉,我在其他任何地方都没有看到这个问题的答案。 SQL Server 2008中的TSQL是否允许在单个case语句中设置多个字段。例如:

case MyField
    when 1 then ThisField = 'foo', ThatField = 'bar'
    when 2 then ThisField = 'Mickey', ThatField = 'Mouse'
    else ThisField = NULL, ThatField = NULL
end

由于我的条件没有改变,最好根据该条件设置所有字段,而不是使用具有重复条件的多个case语句。

3 个答案:

答案 0 :(得分:2)

不,大小写仅返回标量值。

ThisField = case MyField when 1 then 'foo' when 2 then 'Mickey' end,
ThatField = case MyField when 1 then 'bar' when 2 then 'Mouse' end 

答案 1 :(得分:2)

您可以在派生表或CTE上使用JOIN

;WITH updates AS
(
SELECT 1 AS MyField, 'foo' AS ThisField, 'bar' AS ThatField UNION ALL
SELECT 2 AS MyField, 'Mickey' AS ThisField, 'Mouse' AS ThatField 
)
UPDATE    YourTable
SET              ThisField =updates.ThisField, ThatField=updates.ThatField
FROM         YourTable LEFT OUTER JOIN
                      updates ON YourTable.MyField = t.MyField

SELECT

;WITH mappings AS
(
SELECT 1 AS MyField, 'foo' AS ThisField, 'bar' AS ThatField UNION ALL
SELECT 2 AS MyField, 'Mickey' AS ThisField, 'Mouse' AS ThatField 
)
SELECT YourTable.MyField,  
       mappings.ThisField,
       mappings.ThatField
FROM         YourTable LEFT OUTER JOIN
                      mappings ON YourTable.MyField = t.MyField

答案 2 :(得分:1)

使用CASE时,只能使用它来获取输出值,而不是分配值。您可以使用WHERE子句编写多个更新查询以获取要更新的内容。

刚才看到,RedFilter的答案似乎是在一个查询中更新的方法。