给定一个包含三列的表
- ID(主键,非自动递增)
- GroupID
- 一些价值
我正在尝试编写一个 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
)
这会导致 PrimaryKey 冲突,因为它最终会多次重复使用相同的 Max(ID)+1 值。
我唯一可以求助于 T-SQL WHILE 语句中具有递增 Counter 值的一堆 INSERT 语句吗?
我也无法选择将 ID 转换为自动递增的 Identity 列,因为这会破坏我没有源代码的代码。
代替+ 1
,添加行号。我还修复了 WHERE 子句中的错误(应该是GroupID =
, not 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
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)