Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

É possível obter IDs PrimaryKey de volta após um SQL BulkCopy?


Nesse cenário, eu usaria SqlBulkCopy para inserir em um preparo table (ou seja, um que se parece com os dados que quero importar, mas não faz parte das principais tabelas transacionais) e, em seguida, no banco de dados para um INSERT /SELECT para mover os dados para a primeira tabela real.

Agora tenho duas opções dependendo da versão do servidor; Eu poderia fazer um segundo INSERT /SELECT para a segunda tabela real, ou eu poderia usar o INSERT /OUTPUT cláusula para fazer a segunda inserção, usando as linhas de identidade da tabela.

Por exemplo:
     -- 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