Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

È possibile recuperare gli ID PrimaryKey dopo una BulkCopy SQL?

In quello scenario, userei SqlBulkCopy da inserire in una messa in scena tabella (ovvero una che assomiglia ai dati che voglio importare, ma non fa parte delle principali tabelle transazionali), e poi nel DB in un INSERT /SELECT per spostare i dati nella prima tabella reale.

Ora ho due scelte a seconda della versione del server; Potrei fare un secondo INSERT /SELECT alla seconda tabella reale, oppure potrei usare INSERT /OUTPUT clausola per eseguire il secondo insert , utilizzando le righe di identità dalla tabella.

Ad esempio:

     -- 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