это будет работать
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
Если вы дать некоторую информацию я могла бы обеспечить Somthing более многоразовые. Должен/есть colId
(be) столбец идентичности?
EDIT
Это будет работать в этом узкоспециализированных случае
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
Я подозреваю Somthing как это более общий подход является целесообразным.
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
EDIT 3
Если вы думаете EDIT 2 на самом деле то, что вы хотите, то вы действительно хотите сделать ColID
в IDENTITY
колонку, то вы могли бы сделать это.
INSERT tab_A (col1, col2, col3)
SELECT col1, col2, col3 FROM tab_A WHERE colId IN (2, 4, 6)
Вы хотите изменить имена или значения? –
Я хотел бы изменить значения - заменить 2 (старую строку) на 23 (новая строка) – witpo