gpt4 book ai didi

sql - INSERT INTO语句,用于复制行并自动增加非身份键ID列

转载 作者:行者123 更新时间:2023-12-04 03:35:00 24 4
gpt4 key购买 nike

给定一个具有三列的表

  • ID(主键,不自动递增)
  • 组ID
  • SomeValue

  • 我正在尝试编写单个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 =):

    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
    )

    关于sql - INSERT INTO语句,用于复制行并自动增加非身份键ID列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2820668/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com