复制行并增加 Version-Column without Cursor / Loop

Copy rows and increase Version-Column without Cursor / Loop

我有一个 table 这种结构:

ID    Version    Content 
-------------------------------------------------------
1     1          sometext
1     2          anothertext
1     3          someverydifferenttext

因此所有行都具有相同的 ID 但版本不同。我想复制这些行(插入语句)并将 Version-Column 增加到下一个空闲数字。

预期结果:

ID    Version    Content 
-------------------------------------------------------
1     1          sometext
1     2          anothertext
1     3          someverydifferenttext
1     4          sometext
1     5          anothertext
1     6          someverydifferenttext

有没有办法在单个 Select-Insert 语句中完成此操作?

我试过...

Insert Into MyTable
SELECT ID
, MAX([Version])OVER(PARTITION BY ID ORDER BY [Version] DESC) + 1
,Content
FROM MyTable

但这不起作用,因为 MAX() 必须在每次单独插入一行后再次计算。我目前看到的唯一选择是循环。

我用T-SQL.

看来您可以使用 ROW_NUMBER 和窗口 MAX:

INSERT INTO dbo.YourTable
SELECT ID,
       ROW_NUMBER() OVER (ORDER BY Version) + MAX(Version) OVER () AS Version,
       Content
FROM dbo.YourTable WITH (UPDLOCK, HOLDLOCK);

db<>fiddle