我正在编写一个批处理插入语句,并且想使用一个临时表来跟踪插入的ID,而不是自己遍历项目并为每个插入的行调用SCOPE_IDENTITY()。
需要插入的数据具有(临时)ID将其链接到也应该插入另一个表中的其他数据,因此我需要实际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子句接受ID,我已经尝试过@MyInsertData.ID
将表与自身连接起来的其他技巧,但似乎没有任何效果。