2012-11-15 5 views
16

Ich werde viele Datenzeilen aus einer CSV-Datei in eine SQL Server-Datenbank importieren (über eine Webanwendung). Ich brauche den automatisch generierten ID-Wert für den Client. Wenn ich dies in einer Schleife mache, ist die Leistung sehr schlecht (aber ich kann SCOPE_IDENTITY() ohne Probleme verwenden).Gibt es eine Möglichkeit, SCOPE_IDENTITY zu verwenden, wenn Sie eine multiple insert-Anweisung verwenden?

würde eine leistungsfähigere Lösung eine Art und Weise wie dies:

INSERT INTO [MyTable] 
VALUES ('1'), ('2'), ('3') 
SELECT SCOPE_IDENTITY() 

Gibt es eine Möglichkeit alle generierten IDs zu erhalten und nur die letzte erzeugte ID nicht?

Danke für Ihre Hilfe!

Mit freundlichen Grüßen, Thorsten

+5

Nein, 'SCOPE_IDENTITY()' gibt Ihnen nur den ** einen, letzten ** eingefügten 'IDENTITY' Wert. Aber Sie könnten die OUTPUT-Klausel von SQL Server überprüfen .... –

+0

Kommentar zu Ihrer gelöschten Antwort: Ich denke, Sie sollten die erste Zeile entfernen und ändern Sie die dritte Zeile zu 'sqlBuilder.Append (" OUTPUT INSERTED.autoid "); '. Sie müssen die Ausgabe nicht in eine Tabellenvariable einfügen, wenn Sie die Ausgabe an Ihren Client-Code senden möchten. –

Antwort

33

Nein, SCOPE_IDENTITY() gibt Ihnen nur den ein, neuesten eingefügt IDENTITY Wert. Aber man kann check out the OUTPUT clause of SQL Server ....

DECLARE @IdentityTable TABLE (SomeKeyValue INT, NewIdentity INT) 

INSERT INTO [MyTable] 
OUTPUT Inserted.Keyvalue, Inserted.ID INTO @IdentityTable(SomeKeyValue, NewIdentity) 
VALUES ('1'), ('2'), ('3') 

Sobald Sie Ihre INSERT Anweisung ausgeführt haben, wird die Tabellenvariable hält „einig Schlüsselwert“ (für Sie, um die Zeile zu identifizieren) und die neu eingefügten ID Werte für jede Zeile eingefügt. Jetzt verrückt damit! :-)

+0

Danke ich werde es versuchen. –

+0

Gibt es ein Risiko, wenn mehrere Benutzer an der gleichen Tabelle arbeiten - können sie falsche IDs (der anderen Benutzer) bekommen? –

+0

@ThorstenKraus: Nein, jede Transaktion erhält nur ihre eigenen Werte zurück –

Verwandte Themen