小编use*_*701的帖子

简单的 SQL CTE 更新

我对这个 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)

sql-server cte update

7
推荐指数
2
解决办法
3688
查看次数

标签 统计

cte ×1

sql-server ×1

update ×1