Estoy escribiendo una declaración de inserción de procesamiento por lotes y me gustaría utilizar una tabla temporal para realizar un seguimiento de las ID insertadas en lugar de recorrer los elementos yo mismo y llamar a SCOPE_IDENTITY () para cada fila insertada.
Los datos que deben insertarse tienen ID (temporales) que lo vinculan con otros datos que también deberían insertarse en otra tabla, por lo que necesito una referencia cruzada del Id real y el Id temporal.
Este es un ejemplo de lo que tengo hasta ahora:
-- The existing table
DECLARE @MyTable TABLE (ID INT IDENTITY(1,1), [Name] NVARCHAR(MAX));
-- My data I want to insert
DECLARE @MyInsertData TABLE (ID INT, [Name] NVARCHAR(MAX));
INSERT INTO @MyInsertData ( ID,Name)
VALUES ( -1 , 'bla'),(-2,'test'),(-3,'last');
DECLARE @MyCrossRef TABLE ([NewId] INT, OldId INT);
INSERT INTO @MyTable ( [Name] )
OUTPUT Inserted.ID, INS.ID INTO @MyCrossRef
SELECT [NAME] FROM @MyInsertData INS
-- Check the result
SELECT * FROM @MyCrossRef
El problema es que no puedo obtener la cláusula OUTPUT INTO para aceptar la ID, lo he intentado @MyInsertData.ID
y otros trucos que unen la tabla, pero parece que nada funciona.