当我运行下面的脚本,Original_Table
得到由UPDATE
声明UPDATE与-AS子句
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,请参阅https://technet.microsoft.com/en-us/library/ms190766(v=sql.105).aspx – Serg
我没有看到任何尝试更新'original_table'。 –
'UPDATE'是一样的。只有'WITH'改变。 –