मैं एक बैच प्रोसेसिंग इंसर्ट स्टेटमेंट लिख रहा हूं और प्रत्येक सम्मिलित पंक्ति के लिए 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 को स्वीकार करने के लिए OUTPUT INTO क्लॉज़ प्राप्त नहीं कर सकता, मैंने कोशिश की है @MyInsertData.ID
और अन्य तरकीबें अपने आप में तालिका में शामिल हो रही हैं, लेकिन कुछ भी काम नहीं करता है।