2010-04-07 2 views
0

Je dois effectuer une très grande insertion de serveur sql à partir d'une application C#. Quelque part dans la gamme de 20 000 à 50 000 enregistrements.Dans une application C#, quel est le moyen le plus optimal pour insérer de nombreux enregistrements dans le serveur SQL?

Quelle est la façon la plus rapide via le serveur SQL pour effectuer l'insertion?

Je connais plusieurs options, mais je ne sais pas laquelle est la plus rapide.

insert into MyTable(column1, column2, ..., column*) 
    select 'value','value',...,'value' 
    union 
    select 'value','value',...,'value' 

OU

insert into MyTable(column1, column2, ..., column*) 
    exec('select ''value'',''value'',...,''value''' 
     'select ''value'',''value'',...,''value''') 

OU

bulk insert from a data file 

OU

Any better way that you know of :) 
+7

Pourquoi ne pas l'essayer et nous parler de vos découvertes? –

Répondre

6

De C#, vous pouvez utiliser SqlBulkCopy, mais pour la vitesse brute globale, je vous attendez pouvez obtenir plus vite avec bcp et vous ca n vraiment syntoniser SSIS le plus. Dans ces deux cas, vous utiliseriez effectivement des exécutables externes - bcp ou dtexec.

+2

Une phrase dans la documentation liée dit vraiment tout (et implique que c'est la façon * la plus rapide * de le faire): Il existe d'autres façons de charger des données dans une table SQL Server (instructions INSERT, par exemple), mais SqlBulkCopy un avantage significatif en termes de performances par rapport à eux –

+0

Si vous pouvez utiliser bcp directement à partir d'un fichier texte, c'est définitivement plus rapide; Si les données sont déjà en mémoire, alors 'SqlBulkCopy' va directement au-dessus du canal, donc c'est très efficace. Il utilise en fait l'instruction INSERT BULK non documentée (** not ** 'BULK INSERT') et écrit directement dans le flux TDS. – Aaronaught

+0

Je recommanderais bcp - fonctionne très bien. –

4

en utilisant la classe SqlBulkCopy est votre meilleur choix si vous allez utiliser C# pour la copie en bloc. Je l'ai utilisé pour transférer 15K lignes de données et il se termine en un éclair.

HTH

+0

SqlBulkCopy est probablement le meilleur pari. – AlwaysAProgrammer

+0

Accord ici, je l'utilise pour charger régulièrement .5 millions d'enregistrements et il vole –

Questions connexes