Piszę instrukcję wsadową przetwarzania wsadowego i chciałbym użyć tabeli tymczasowej, aby śledzić wstawione identyfikatory zamiast samodzielnie zapętlać elementy i wywoływać SCOPE_IDENTITY () dla każdego wstawionego wiersza.
Dane, które należy wstawić, mają (tymczasowy) identyfikator łączący je z innymi danymi, które również powinny zostać wstawione do innej tabeli, więc potrzebuję odsyłacza do rzeczywistego identyfikatora i tymczasowego identyfikatora.
Oto przykład tego, co mam do tej pory:
-- 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
Problem polega na tym, że nie mogę uzyskać klauzuli OUTPUT INTO, aby zaakceptować identyfikator, próbowałem @MyInsertData.ID
i inne sztuczki przyłączyły się do samej tabeli, ale nic nie działa.