gpt4 book ai didi

sql insert select from – 具有唯一列id的多行

转载 作者:行者123 更新时间:2023-12-04 23:43:27 25 4
gpt4 key购买 nike

我正在尝试使用一个查询来复制多条记录,该查询使用 insert select from。

Insert into tab_A(colId, col1, col2, col3)
Select colId, col1, col2, col3 form tab_A
Where colId in ( 2,4,6)

是否可以为新条目分配不同的 colId?例如,colid 2 应替换为 23,4 应替换为 24,6 应替换为 25。如何在单个查询中实现它?

最佳答案

这行得通

Insert into tab_A(colId, col1, col2, col3)
Select 23 , col1, col2, col3 form tab_A Where colId = 2 UNION ALL
Select 24 , col1, col2, col3 form tab_A Where colId = 4 UNION ALL
Select 25 , col1, col2, col3 form tab_A Where colId = 6

如果您提供更多信息,我可以提供更可重用的东西。 colId 应该/是标识列吗?


编辑

这在这种非常特殊的情况下会起作用

Insert into tab_A(colId, col1, col2, col3)
Select ((colId - 4) * (-1)) + colId + 20 , col1, col2, col3
form tab_A Where colId IN (2, 4, 6)

函数 newId = ((oldId - 4) * (-1)) + oldId + 20 显然特定于所述问题。


EDIT2

我怀疑像这样更通用的方法是合适的。

DECLARE @MaxColID INT

BEGIN TRANSACTION

SELECT @MaxColID = MAX(ColID) FROM tab_A

INSERT tab_A(colId, col1, col2, col3)
SELECT row + @MaxColID, col1, col2, col3
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY ColID) row, col1, col2, col3
FROM tab_A WHERE colID IN (2, 4, 6)
)

COMMIT

编辑 3

如果您认为 EDIT 2 确实是您想要的,那么您真的希望将 ColID 设为 IDENTITY列,那么你可以这样做。

INSERT tab_A (col1, col2, col3)
SELECT col1, col2, col3 FROM tab_A WHERE colId IN (2, 4, 6)

关于sql insert select from – 具有唯一列id的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11340354/

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