2009-03-13 6 views
8

Via un service Web, les ordinateurs distants envoient un ensemble de lignes à insérer dans notre serveur SQL central.Le moyen le plus rapide d'insérer des lignes en masse dans le serveur SQL

Quelle est la meilleure façon (en termes de performances) d'insérer ces lignes? Il pourrait y avoir n'importe où de 50 à 500 lignes à insérer à chaque fois. Je sais que je peux faire une insertion en masse ou mettre en forme les données au format XML qui l'insèrent de cette façon, mais je ne l'ai jamais fait auparavant dans un environnement d'entreprise.

Mises à jour en utilisant les services Web wcf (ou peut-être pas encore sûr) et SQL Server 2008 standard.

+1

Déclarant la version du serveur SQL fait vraiment une différence. – AnthonyWJones

Répondre

3

De quel type de service web s'agit-il?

Si c'est .Net, généralement la meilleure façon est de charger l'entrée dans un DataTable, puis le tirer sur le serveur SQL en utilisant la classe SqlBulkCopy

5

À moins que vous utilisez sur un ordinateur de 10 ans , 50-500 lignes n'est pas très nombreux; vous pouvez littéralement envoyer des instructions SQL et les rediriger directement dans la base de données pour obtenir des performances exceptionnelles. En supposant que vous faites confiance aux services qui vous envoient des données, bien sûr :-)

Si la performance est vraiment un problème, envoyer un fichier bcp est absolument le moyen le plus rapide de bloquer les données dans la base de données. Il ressort de votre question que vous savez déjà comment faire cela.

+0

J'ai un ordinateur de 10 ans qui exécute le serveur SQL 2000, il ne serait pas en vrac à un insert de 500 lignes. ;) – AnthonyWJones

+0

A-t-il plus de 32 Mo de mémoire principale? –

2

50-500 lignes ne devraient pas poser de problème! Il n'y a pas besoin de faire des réglages de performance! Faites des instructions SQL normales (préparées) dans votre application. Ne le tuez pas avec la complexité et la sur-ingénierie.

Lorsque vous devez insérer plus de 250.000 lignes, vous devriez penser à la mise à l'échelle! Ne tournez pas des contraintes, vous pourriez tuer la DB.

4

Un simple 50-500 enregistrements ne constitue pas un "encart en vrac". Le mécanisme d'insertion en bloc est conçu pour l'importation de données vraiment massive qui doit être immédiatement suivie d'une sauvegarde.

Dans le service Web je passerais simplement le XML dans le serveur SQL. Les détails dépendraient de la version.

+0

sql server 2008. Mais que faire si j'ai des milliers de clients qui téléchargent des données. – bigint

+0

Des milliers de clients? Comment faire de tels messages par jour?Peut-être une autre façon de le regarder est combien d'enregistrements sur la période active des applications dans une journée à laquelle vous vous attendez à être inséré dans le total? – AnthonyWJones

2

Pour répondre à toutes les autres réponses, 500 lignes ne posent aucun problème pour le serveur SQL. Si vous avez besoin d'insérer un grand nombre d'enregistrements, le plus rapide est un intégré proc stocké appelé BulkInsert,

BulkInsert

qui (je crois) est un point d'entrée à un utilitaire SQL Server conçu spécifiquement pour ce faire appelé bcp.exe

bcp

Questions connexes