ฉันกำลังเขียนคำสั่งแทรกการประมวลผลแบบแบทช์และต้องการใช้ตาราง temp เพื่อติดตาม ID ที่ถูกแทรกแทนการวนลูปผ่านไอเท็มด้วยตัวเองและเรียก SCOPE_IDENTITY () สำหรับแต่ละแถวที่แทรก
ข้อมูลที่ต้องถูกแทรกมี (ชั่วคราว) ของ 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
ปัญหาคือว่าฉันไม่สามารถรับเอาท์พุทเป็นคำสั่งที่จะยอมรับ ID ฉันได้ลอง@MyInsertData.ID
และเทคนิคอื่น ๆ เข้าร่วมตารางเพื่อตัวเอง แต่ดูเหมือนว่าไม่มีอะไรทำงาน