这个会起作用。
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
显然是针对特定问题而设计的。
编辑2
我猜这样的通用方法更为适合。
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
如果您认为编辑 2实际上是您想要的,则需要将ColID
设置为IDENTITY
列,然后可以执行以下操作。
INSERT tab_A (col1, col2, col3)
SELECT col1, col2, col3 FROM tab_A WHERE colId IN (2, 4, 6)