Я пишу оператор вставки пакетної обробки і хотів би використовувати таблицю темпів для відстеження вставлених ідентифікаторів замість того, щоб переглядати самі елементи і викликати SCOPE_IDENTITY () для кожного вставленого рядка.
Дані, які потрібно вставити, мають (тимчасовий) ідентифікатор, що пов'язує його з іншими даними, які також слід вставити в іншу таблицю, тому мені потрібна перехресна посилання на фактичний Id та тимчасовий Id.
Це приклад того, що я маю досі:
-- 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
Проблема полягає в тому, що я не можу отримати пункт OUTPUT INTO прийняти ідентифікатор, я намагався @MyInsertData.ID
та інші хитрощі приєднання таблиці до себе, але, здається, нічого не працює.