Tsql 在单个case语句中设置多个字段
我对SQLServer2008不太熟悉,在其他任何地方我都没有看到这个问题的答案。SQL Server 2008中的TSQL是否允许在单个case语句中设置多个字段。例如:Tsql 在单个case语句中设置多个字段,tsql,sql-server-2008,case,Tsql,Sql Server 2008,Case,我对SQLServer2008不太熟悉,在其他任何地方我都没有看到这个问题的答案。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 =
case MyField
when 1 then ThisField = 'foo', ThatField = 'bar'
when 2 then ThisField = 'Mickey', ThatField = 'Mouse'
else ThisField = NULL, ThatField = NULL
end
由于我的条件不变,因此最好基于该条件设置所有字段,而不是使用多个case语句和重复的条件。否,case只返回标量值
ThisField = case MyField when 1 then 'foo' when 2 then 'Mickey' end,
ThatField = case MyField when 1 then 'bar' when 2 then 'Mouse' end
当您使用CASE时,您只能使用它来获取输出值,而不能指定值。可以使用WHERE子句编写多个update查询,以获取要更新的内容
刚才看到,RedFilter的答案似乎是在一个查询中更新的方式。您可以使用对派生表或CTE的连接
;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
或选择
我的代码写得很糟糕。这不是一个update语句,而是一个混乱的语法。更像:当1然后“foo”作为这个字段,“bar”作为那个字段。但是,答案似乎是否定的。唉!我同意RedFilter。但是在复杂的case语句中,最好合并代码,而不是重复when子句.True。除了我没有更新。这种情况是较长的SELECT语句的一部分。然而,这种方法在后面会被提到。谢谢。@Count-您可以使用相同的方法进行选择!这个建议非常有效。我将case语句放在派生表创建中,然后用新的派生版本替换联接表。这给了我所需的灵活性,并允许我在select语句体中不使用case语句的多个实例。谢谢
;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