我正忙着编写一段SQL,如果第1列的结果符合某些条件,我只想更新第2列。
在下面的例子中,我正在寻找一种语法,它允许我在继续下一个之前执行一次更新,所以我可以使用第二次中第一次的结果。
CREATE TABLE #Rows
(
RowID INT IDENTITY
,Num1 INT
,Num2 INT
)
INSERT INTO #Rows
(
Num1,Num2)
VALUES
(1,10),
(1,10)
SELECT
*
FROM
#Rows
UPDATE
#Rows
SET
Num1 = CASE WHEN Num1 + Num2 < 20 THEN 10 --Update 1 : I want this statement to execute first
END
,Num2 = CASE WHEN Num1 + Num2 = 20 THEN 100 ELSE 700 --Update 2 : I want this statement to execute after Update 1
END
SELECT
*
FROM
#Rows
DROP TABLE #Rows
我得到的结果如下:
RowID Num1 Num2
1 10 700
2 10 700
我希望得到以下结果:
RowID Num1 Num2
1 10 700
2 10 100
有什么想法吗?
答案 0 :(得分:1)
由于Num1设置为表达式的结果,您可以在第二个CASE
语句中重用该表达式:
UPDATE
#Rows
SET
Num1 = CASE
WHEN Num1 + Num2 < 20 THEN 10
END,
Num2 = CASE
WHEN CASE
WHEN Num1 + Num2 < 20 THEN 10
ELSE Num1
END + Num2 = 20 THEN 100
ELSE 700 --Update 2 : I want this statement to execute after Update 1
END
是的它很乱,但它应该有用。
我认为另一种方法是将整个事物包装在事务中并进行两次更新
答案 1 :(得分:0)
我认为你不能这样做,你将需要两个更新语句或更改CASE条件。据我所知,SQL语法不是为此而设计的。
在此处阅读更多信息: