Неожиданное поведение ROW_NUMBER при OUTPUT через DELETE - PullRequest
0 голосов
/ 03 сентября 2018

Я бы ожидал, что [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;
...