sql >> Base de Datos >  >> RDS >> Sqlserver

¿Es posible recuperar los ID de la clave principal después de una copia masiva de SQL?

En ese escenario, usaría SqlBulkCopy para insertar en una puesta en escena (es decir, uno que se parece a los datos que quiero importar, pero que no forma parte de las tablas transaccionales principales), y luego en la base de datos a un INSERT /SELECT para mover los datos a la primera tabla real.

Ahora tengo dos opciones dependiendo de la versión del servidor; Podría hacer un segundo INSERT /SELECT a la segunda tabla real, o podría usar INSERT /OUTPUT cláusula para hacer la segunda inserción, usando las filas de identidad de la tabla.

Por ejemplo:

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