给定一个具有三列的表
我正在尝试编写单个SQL INSERT INTO语句,该语句将具有一个GroupID的每一行的副本复制到新的GroupID中。
起始表示例:
ID | GroupID | SomeValue ------------------------ 1 | 1 | a 2 | 1 | b
运行简单的INSERT INTO语句后的目标:
ID | GroupID | SomeValue ------------------------ 1 | 1 | a 2 | 1 | b 3 | 2 | a 4 | 2 | b
我以为我可以做这样的事情:
INSERT INTO MyTable ( [ID] ,[GroupID] ,[SomeValue] ) ( SELECT (SELECT MAX(ID) + 1 FROM MyTable) ,@NewGroupID ,[SomeValue] FROM MyTable WHERE ID = @OriginalGroupID )
这将导致一次主键冲突,因为它将最终多次重用相同的Max(ID)+1值。
我唯一的求助对象是T-SQL WHILE语句中具有递增的Counter值的一堆INSERT语句吗?
我也没有选择将ID转换为自动递增的Identity列,因为那样会破坏我没有源代码的代码。
代替+ 1,添加行号。我还修复了您的WHERE子句中的错误(应该是GroupID =,而不是ID =):
+ 1
GroupID =
ID =
INSERT INTO MyTable ( [ID] ,[GroupID] ,[SomeValue] ) ( SELECT (SELECT MAX(ID) FROM MyTable) + ROW_NUMBER() OVER (ORDER BY GroupId), @NewGroupID, [SomeValue] FROM MyTable WHERE GroupID = @OriginalGroupID )