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