我对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语句。
答案 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的答案似乎是在一个查询中更新的方法。