2008-10-21 9 views
62

J'ai une table de base de données sur un serveur de développement qui est maintenant entièrement remplie après l'avoir définie avec une routine d'importation pour un fichier CSV contenant 1,4 million de lignes. J'ai exécuté l'Assistant Publication de base de données sur la table et maintenant j'ai un script SQL de 286 Mo sur ma machine locale. Le problème est, je ne peux pas comprendre comment l'exécuter. Si je le charge dans SQL Server Management Studio Express, je reçois une fenêtre d'alerte qui indique "L'opération n'a pas pu aboutir".SQL Server - Exécution de fichiers de script volumineux

Des idées sur la façon dont je peux exécuter ce script SQL?

+1

J'ai posé une question similaire sur DBA et j'ai reçu de très bons commentaires (http://dba.stackexchange.com/questions/16763/how-do-i-run-a-large-script-with-many-inserts -without-running-out-of-memory /) – spaghetticowboy

Répondre

-5

Courir quelque chose qui à l'intérieur d'une seule grande transaction n'est pas une bonne idée. Par conséquent, je recommande de diviser le fichier en morceaux plus petits et plus faciles à gérer.

Une autre option consiste à examiner d'autres façons d'importer des données CSV directement.

+7

La réponse de Gulzar Nazim est la meilleure réponse. – Feryt

+9

@feryt cela peut être votre opinion, mais ce n'est pas ce que l'OP a décidé, et ce n'est pas la faute de Michael si vous préférez la réponse de quelqu'un d'autre (même si l'autre réponse n'a pas résolu le problème). –

160

utiliser l'outil sqlcmd pour exécuter le fichier ..

sqlcmd -S myServer\instanceName -i C:\myScript.sql 
+1

En utilisant cette méthode, j'obtiens l'erreur "Sqlcmd: Erreur: erreur de script." Est-ce à voir avec la taille du fichier? – tags2k

+0

premier contrôle sur la connectivité. peut-être que vous devez passer un nom d'utilisateur et un mot de passe (options -U -P). pouvez-vous également essayer avec un fichier plus petit. J'ai couru des scripts énormes sans aucun problème. –

+0

Si je supprime toutes les instructions INSERT sauf 15, cela fonctionne. Si je mets les autres 1 410 472 déclarations en arrière échoue avec ce message d'erreur. – tags2k

0

Pourquoi ne pas simplement utiliser DTS pour importer directement le fichier CSV?

+0

Un tas de traitement doit d'abord être effectué sur les données, que je ne veux pas exécuter sur le serveur live. Par conséquent, je dois être en mesure de traiter les données dans un script SQL simple pour minimiser le travail requis par cette boîte. – tags2k

7

Ajout à la réponse de Gulzar Nazim: Si vous obtenez toujours un échec, essayez de spécifier le codepage de votre fichier SQL en utilisant l'option -f:

sqlcmd -S myServer\instanceName -d databaseName -i C:\myScript.sql -f 65001

J'ai essayé d'importer un fichier .dump de SQLite (UTF-8 par défaut), et sqlcmd lançait une erreur après avoir rencontré le premier caractère spécial. -f 65001 l'a fixé pour moi.

Questions connexes