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