我发现了这个奇怪的脚本,我不明白它。为什么这个cte删除我的表sampledata中的数据?我从来没有写过这样做的命令?有人能理解它吗?
DROP TABLE IF EXISTS #SampleData;
GO
CREATE TABLE #SampleData
(
IntegerValue INTEGER,
);
GO
INSERT INTO #SampleData VALUES
(1),(1),(2),(3),(3),(4);
GO
WITH cte_Duplicates AS
(
SELECT ROW_NUMBER() OVER (PARTITION BY IntegerValue ORDER BY IntegerValue) AS Rnk
FROM #SampleData
)
DELETE FROM cte_Duplicates WHERE Rnk > 1
GO
1条答案
按热度按时间xa9qqrwz1#
CTE仍会在其基础数据表上作业。
其目的是以更好的可读性形式呈现或操作数据,尤其是在编写复杂查询时。
其目的不是创建表的副本,因此在执行删除、更新或插入命令时不会更改表。
因此,你的命令
从示例表中删除重复项。
如果要将更改应用于表的副本而不是表本身,则CTE是不够的。
在这种情况下,您需要一个临时表。
另请参阅此处CTE和临时表之间的差异:differences