Saya menulis pernyataan penyisipan pemrosesan batch dan ingin menggunakan tabel temp untuk melacak ID yang dimasukkan alih-alih mengulang-ulang item sendiri dan memanggil SCOPE_IDENTITY () untuk setiap baris yang dimasukkan.
Data yang perlu dimasukkan memiliki (sementara) ID yang menautkannya ke data lain yang juga harus dimasukkan ke tabel lain, jadi saya perlu referensi silang dari Id aktual dan Id sementara.
Ini adalah contoh dari apa yang saya miliki sejauh ini:
-- 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
Masalahnya adalah bahwa saya tidak bisa mendapatkan klausa OUTPUT INTO untuk menerima ID, saya sudah mencoba @MyInsertData.ID
dan trik lain bergabung dengan tabel untuk dirinya sendiri, tetapi sepertinya tidak ada yang berhasil.