当我运行以下脚本时,Original_Table
语句
UPDATE
WITH temp AS (
SELECT
ROW_NUMBER() over (partition by x order by y) row_num, x, z
FROM Original_Table )
UPDATE temp set z = a + (select ISNULL(SUM(a),0) from temp A where A.x= temp.xand A.row_num < temp.row_num)
但是当我用以下
替换WITH时CREATE TABLE
#temp
(
row_num INT NOT NULL ,
x INT NOT NULL,
a DECIMAL NOT NULL ,
z DECIMAL NULL
);
insert into #temp
SELECT
ROW_NUMBER() over (partition by x order by y) row_num, x, z
FROM Original_Table
UPDATE temp set z = a + (select ISNULL(SUM(a),0) from temp A where A.x= temp.xand A.row_num < temp.row_num)
UPDATE
仅更新#temp
表,但不更新Original_Table
为什么?
答案 0 :(得分:2)
第一个示例通过CTE更新基于temp
的查询的Original_Table
。更新CTE时更新基表。正如here所述,CTE 在UPDATE
语句的范围内。
第二个示例查询Original_Table
并将结果保存在新表中:#temp
。然后更新临时表。没有魔术记忆将#temp
中的行绑定回Original_Table
中的行,您可能不会想要一行。
答案 1 :(得分:1)
最后一句话
UPDATE temp
set z = a + (select ISNULL(SUM(a),0)
from temp A where A.x= temp.x
and A.row_num < temp.row_num)
只更新一些表名&#34; temp&#34;。声明中没有引用Original_Table