Ich schreibe eine Batch-Verarbeitungs-Insert-Anweisung und möchte eine temporäre Tabelle verwenden, um die eingefügten IDs zu verfolgen, anstatt die Elemente selbst zu durchlaufen und SCOPE_IDENTITY () für jede eingefügte Zeile aufzurufen.
Die Daten, die eingefügt werden müssen, haben (temporäre) IDs, die sie mit anderen Daten verknüpfen, die ebenfalls in eine andere Tabelle eingefügt werden sollen. Daher benötige ich einen Querverweis auf die tatsächliche ID und die temporäre ID.
Dies ist ein Beispiel für das, was ich bisher habe:
-- 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
Das Problem ist, dass ich die OUTPUT INTO-Klausel nicht dazu bringen kann, die ID zu akzeptieren. Ich habe es versucht @MyInsertData.ID
und andere Tricks, die die Tabelle mit sich selbst verbinden, aber nichts scheint zu funktionieren.