【发布时间】:2017-04-21 10:17:50
【问题描述】:
当我运行以下脚本时,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)
但是当我用以下内容替换时
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
这是为什么呢?
【问题讨论】:
-
这称为公用表表达式。对于 MS Sql,请参阅 technet.microsoft.com/en-us/library/ms190766(v=sql.105).aspx
-
我没有看到任何更新
original_table的尝试。 -
UPDATE是一样的。只有WITH更改。
标签: sql-server tsql common-table-expression temp-tables table-variable