给定一个包含三列的表
我正在尝试编写单个SQL INSERT INTO语句,该语句将具有一个GroupID的每一行的副本复制到新的GroupID中.
示例开始表:
ID | GroupID | SomeValue
------------------------
1 | 1 | a
2 | 1 | b
Run Code Online (Sandbox Code Playgroud)
我运行一个简单的INSERT INTO语句后的目标:
ID | GroupID | SomeValue
------------------------
1 | 1 | a
2 | 1 | b
3 | 2 | a
4 | 2 | b
Run Code Online (Sandbox Code Playgroud)
我以为我可以这样做:
INSERT INTO MyTable
( [ID]
,[GroupID]
,[SomeValue]
)
(
SELECT (SELECT MAX(ID) + 1 FROM MyTable)
,@NewGroupID
,[SomeValue]
FROM MyTable
WHERE ID = @OriginalGroupID
)
Run Code Online (Sandbox Code Playgroud)
这会导致PrimaryKey违规,因为它最终会多次重复使用相同的Max(ID)+1值.
我是否只能在T-SQL WHILE语句中使用一堆具有递增计数器值的INSERT语句?
我也没有选择将ID转换为自动递增标识列,因为这会破坏我没有源代码的代码.
Mar*_*ers 11
而不是+ 1
,添加行号.我还修复了WHERE子句中的错误(应该是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
)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
12909 次 |
最近记录: |