我对这个 CTE 更新 stmt 有点困惑:
DECLARE @a TABLE (ID int, Value int);
DECLARE @b TABLE (ID int, Value int);
INSERT @a VALUES (1, 10), (2, 20);
INSERT @b VALUES (1, 100),(2, 200);
WITH cte AS
(
SELECT * FROM @a
)
UPDATE cte
SET Value = b.Value
FROM cte AS a
INNER JOIN @b AS b
ON b.ID = a.ID
SELECT * FROM @a
GO
Run Code Online (Sandbox Code Playgroud)
为什么这会导致表@a
的两行都为 100?我认为 ID 1 应该是 100,ID 2 应该是 200。
如果我使用表而不是公用表表达式来进行更新,我会得到预期的结果:
DECLARE @a TABLE …
Run Code Online (Sandbox Code Playgroud)