これはうまくいくでしょう
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
さらに情報を提供していただければ、より再利用可能なものを提供できます。ID 列にする必要が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)