I det scenariot skulle jag använda SqlBulkCopy
att infoga i en stage tabell (dvs. en som ser ut som de data jag vill importera, men som inte är en del av de huvudsakliga transaktionstabellerna), och sedan vid DB till en INSERT
/SELECT
för att flytta data till den första riktiga tabellen.
Nu har jag två val beroende på serverversionen; Jag skulle kunna göra en andra INSERT
/SELECT
till den andra riktiga tabellen, eller så kan jag använda INSERT
/OUTPUT
sats för att göra den andra infogningen, med hjälp av identitetsraderna från tabellen.
Till exempel:
-- 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