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