Я бы ожидал, что [version]
будет больше 1 в #X
ниже, но скорее всего, ROW_NUMBER
переоценивается на пути к #X
. Это предполагаемое поведение и есть ли способ предотвратить это?
DROP TABLE IF EXISTS #T;
CREATE TABLE #T (id INT, v CHAR(1));
INSERT INTO #T VALUES (1, 'a'), (1, 'b'), (2, 'a'), (2, 'b'), (2, 'c');
DROP TABLE IF EXISTS #X;
SELECT TOP 0 *, 1 AS [version] INTO #X FROM #T;
DELETE t OUTPUT deleted.* INTO #X FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY v) AS [version] FROM #T
) t WHERE t.[version] > 1;
SELECT * FROM #X;