Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Möglich, PrimaryKey-IDs nach einer SQL-BulkCopy zurückzubekommen?

In diesem Szenario würde ich SqlBulkCopy verwenden in eine Staging einzufügen Tabelle (d. h. eine, die wie die Daten aussieht, die ich importieren möchte, aber nicht Teil der Haupttransaktionstabellen ist), und dann in der DB zu einem INSERT /SELECT um die Daten in die erste echte Tabelle zu verschieben.

Jetzt habe ich je nach Serverversion zwei Möglichkeiten; Ich könnte ein zweites INSERT machen /SELECT in die zweite echte Tabelle, oder ich könnte den INSERT verwenden /OUTPUT -Klausel, um die zweite Einfügung auszuführen, wobei die Identitätszeilen aus der Tabelle verwendet werden.

Zum Beispiel:

     -- dummy schema
     CREATE TABLE TMP (data varchar(max))
     CREATE TABLE [Table1] (id int not null identity(1,1), data varchar(max))
     CREATE TABLE [Table2] (id int not null identity(1,1), id1 int not null, data varchar(max))

     -- imagine this is the SqlBulkCopy
     INSERT TMP VALUES('abc')
     INSERT TMP VALUES('def')
     INSERT TMP VALUES('ghi')

     -- now push into the real tables
     INSERT [Table1]
     OUTPUT INSERTED.id, INSERTED.data INTO [Table2](id1,data)
     SELECT data FROM TMP