Tôi đang viết một câu lệnh chèn xử lý hàng loạt và muốn sử dụng bảng tạm thời để theo dõi ID được chèn thay vì tự lặp qua các mục và gọi SCOPE_IDENTITY () cho mỗi hàng được chèn.
Dữ liệu cần được chèn có ID (tạm thời) liên kết nó với dữ liệu khác cũng nên được chèn vào một bảng khác, vì vậy tôi cần một tham chiếu chéo của Id thực tế và Id tạm thời.
Đây là một ví dụ về những gì tôi có cho đến nay:
-- 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
Vấn đề là tôi không thể nhận được mệnh đề OUTPUT INTO để chấp nhận ID, tôi đã thử @MyInsertData.ID
và các thủ thuật khác tham gia vào bảng, nhưng dường như không có gì hoạt động.