使用 WITH-AS 子句进行更新
UPDATE with WITH-AS clause
当我 运行 以下脚本时,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
table 但不更新 Original_Table
这是为什么?
最后一句话
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)
仅更新一些 table 名称 "temp"。引用 Original_Table
的语句中没有任何内容
第一个示例更新 temp
,它基于通过 CTE 来自 Original_Table
的查询。更新 CTE 时更新基础 table。正如 here 所解释的那样,CTE 在 范围内 UPDATE
声明。
第二个示例查询 Original_Table
并将结果保存在 new table: #temp
中。然后更新临时 table 。没有 魔法记忆 将 #temp
中的行与 Original_Table
中的行联系起来,你可能不想要一个。
当我 运行 以下脚本时,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
table 但不更新 Original_Table
这是为什么?
最后一句话
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)
仅更新一些 table 名称 "temp"。引用 Original_Table
第一个示例更新 temp
,它基于通过 CTE 来自 Original_Table
的查询。更新 CTE 时更新基础 table。正如 here 所解释的那样,CTE 在 范围内 UPDATE
声明。
第二个示例查询 Original_Table
并将结果保存在 new table: #temp
中。然后更新临时 table 。没有 魔法记忆 将 #temp
中的行与 Original_Table
中的行联系起来,你可能不想要一个。