Wenn ich das folgende Skript ausführen, wird Original_Table
durch die UPDATE
Anweisung aktualisiertUPDATE mit WITH-Klausel 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)
Aber wenn ich ersetzen MIT mit den folgenden
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)
die UPDATE
Updates nur die #temp
Tabelle aber nicht Original_Table
Warum ist das?
Dies wird als allgemeiner Tabellenausdruck bezeichnet. Für MS Sql siehe https://technet.microsoft.com/en-us/library/ms190766(v=sql.105).aspx – Serg
Ich sehe keinen Versuch, 'original_table' zu aktualisieren. –
das 'UPDATE' ist das gleiche. Nur 'WITH' ändert sich. –