Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Possible de récupérer les identifiants PrimaryKey après un SQL BulkCopy ?

Dans ce scénario, j'utiliserais SqlBulkCopy à insérer dans une mise en scène table (c'est-à-dire celle qui ressemble aux données que je veux importer, mais ne fait pas partie des principales tables transactionnelles), puis au niveau de la base de données vers un INSERT /SELECT pour déplacer les données dans la première table réelle.

Maintenant, j'ai deux choix selon la version du serveur ; Je pourrais faire un deuxième INSERT /SELECT à la deuxième vraie table, ou je pourrais utiliser le INSERT /OUTPUT clause pour faire la deuxième insertion, en utilisant les lignes d'identité de la table.

Par exemple :

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