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?