我有一个SQL服务器表,其中有2列,我希望根据发送给存储过程的标志和新值一起更新它们的值,如下所示:
UPDATE
table_Name
SET
CASE
WHEN @flag = '1' THEN column_A += @new_value
WHEN @flag = '0' THEN column_B += @new_value
END AS Total
WHERE
ID = @ID
正确的SQL server代码是什么?
发布于 2013-09-08 18:15:24
目前的答案很好,应该可以工作,但是更简单、更明显和更可维护的答案有什么问题:
IF @flag = 1
UPDATE table_name SET column_A = column_A + @new_value WHERE ID = @ID;
ELSE
UPDATE table_name SET column_B = column_B + @new_value WHERE ID = @ID;
尽管这是一个非常简单的查询,但阅读起来要容易得多。
这是一个由@snyder提供的工作示例:SqlFiddle。
发布于 2013-09-08 18:09:40
像这样的东西应该是有效的:
UPDATE
table_Name
SET
column_A = CASE WHEN @flag = '1' THEN column_A + @new_value ELSE column_A END,
column_B = CASE WHEN @flag = '0' THEN column_B + @new_value ELSE column_B END
WHERE
ID = @ID
发布于 2013-09-08 18:10:42
由于您使用的是SQL 2008:
UPDATE
table_Name
SET
column_A
= CASE
WHEN @flag = '1' THEN @new_value
ELSE 0
END + column_A,
column_B
= CASE
WHEN @flag = '0' THEN @new_value
ELSE 0
END + column_B
WHERE
ID = @ID
如果您使用的是SQL 2012:
UPDATE
table_Name
SET
column_A = column_A + IIF(@flag = '1', @new_value, 0),
column_B = column_B + IIF(@flag = '0', @new_value, 0)
WHERE
ID = @ID
https://stackoverflow.com/questions/18682515
复制相似问题