variable update stored into inserted tsql insert

tsql - update - T-SQL: INSERTAR el valor original en la cláusula OUTPUT



select identity sql server (1)

Si está en SQL Server 2008+, puede usar MERGE para obtener tanto la ID actual como la nueva. La técnica se describe en esta pregunta .

Para su ejemplo, la declaración podría verse así:

MERGE Items AS t USING ( SELECT * FROM Items WHERE Name = ''Cat'' ) AS s ON 0 = 1 WHEN NOT MATCHED BY TARGET THEN INSERT (target_column_list) VALUES (source_column_list) OUTPUT INSERTED.ItemID, S.ItemID INTO @ID2ID (OldItemID, NewItemID);

Tengo una tabla de elementos (ItemID, Name, ...) donde ItemID es una identidad generada automáticamente

Quiero agregar filas a esta tabla DESDE seleccionar en esta misma tabla. Y guarde en la variable de tabla las referencias entre OriginalItemID y NewlyGeneratedID.

Así que quiero que se parezca a lo siguiente:

DECLARE @ID2ID TABLE (OldItemID INT, NewItemID INT); INSERT INTO Items OUTPUT Items.ItemID, INSERTED.ItemID INTO @ID2ID SELECT * FROM Items WHERE Name = ''Cat'';

PERO Items.ItemID obviamente no funciona aquí. ¿Existe alguna solución para que OUTPUT tome el ItemID original de la instrucción SELECT?