265 votes

Comment importer un gros fichier MS SQL .sql ?

J'utilise RedGate SQL data compare et j'ai généré un fichier .sql, afin de pouvoir l'exécuter sur ma machine locale. Mais le problème est que le fichier est supérieur à 300 mb, ce qui signifie que je ne peux pas faire de copier-coller car le presse-papiers ne pourra pas le gérer, et lorsque j'essaie d'ouvrir le fichier dans SQL Server Management Studio, j'obtiens une erreur indiquant que le fichier est trop volumineux.

Existe-t-il un moyen d'exécuter un gros fichier .sql ? Le fichier contient essentiellement des données pour deux nouvelles tables.

490voto

Ray Booysen Points 10606

À partir de l'invite de commande, lancez sqlcmd :

sqlcmd -S <server> -i C:\<your file here>.sql 

Il suffit de remplacer <server> avec l'emplacement de votre boîte SQL et <your file here> avec le nom de votre script. N'oubliez pas, si vous utilisez une instance SQL la syntaxe est :

sqlcmd -S <server>\instance.

Voici la liste de tous les arguments que vous pouvez passer à sqlcmd :

Sqlcmd            [-U login id]          [-P password]
  [-S server]            [-H hostname]          [-E trusted connection]
  [-d use database name] [-l login timeout]     [-t query timeout] 
  [-h headers]           [-s colseparator]      [-w screen width]
  [-a packetsize]        [-e echo input]        [-I Enable Quoted Identifiers]
  [-c cmdend]            [-L[c] list servers[clean output]]
  [-q "cmdline query"]   [-Q "cmdline query" and exit] 
  [-m errorlevel]        [-V severitylevel]     [-W remove trailing spaces]
  [-u unicode output]    [-r[0|1] msgs to stderr]
  [-i inputfile]         [-o outputfile]        [-z new password]
  [-f  | i:[,o:]] [-Z new password and exit] 
  [-k[1|2] remove[replace] control characters]
  [-y variable length type display width]
  [-Y fixed length type display width]
  [-p[1] print statistics[colon format]]
  [-R use client regional setting]
  [-b On error batch abort]
  [-v var = "value"...]  [-A dedicated admin connection]
  [-X[1] disable commands, startup script, environment variables [and exit]]
  [-x disable variable substitution]
  [-? show syntax summary]

2 votes

J'ai quelques encarts comme : INSERT INTO table_name (text) VALUES ('some text bla bla 'bla' text') . J'ai une erreur avec les guillemets. Alors que dois-je utiliser (quel paramètre) pour gérer cette erreur ? Merci

1 votes

Peut-on garder le script sur un disque externe ? Comme le lecteur E : ? au lieu du lecteur C ?

0 votes

Yup, rien qui ne t'arrête.

75voto

Takuro Points 41

J'ai eu exactement le même problème et j'ai lutté pendant un certain temps, puis j'ai finalement trouvé la solution qui consiste à définir -a au paramètre sqlcmd afin de modifier sa taille de paquet par défaut :

sqlcmd -S [servername] -d [databasename] -i [scriptfilename] -a 32767

5 votes

+1 pour avoir ajouté l'option -d dans l'exemple. J'ai utilisé "USE [DBNAME]" dans mon fichier sql. Cela a également fonctionné. Je ne sais pas quelle est la meilleure méthode ou la méthode préférée.

3 votes

Merci. J'ai utilisé la commande suivante comme nom d'utilisateur et mot de passe requis pour se connecter à la base de données. sqlcmd -S <Servername> -U <Username> -P <password> -d <Databasename> -i <filename>

1 votes

Quel problème avez-vous résolu en fixant la taille des paquets ? Microsoft dit : "Une taille de paquet plus importante peut améliorer les performances..." ( docs.microsoft.com/fr/us/sql/tools/sqlcmd-utility )

3voto

BobbyShaftoe Points 19925

5 votes

Note sqlcmd remplace osql .

1voto

Philippe Grondier Points 6697

Votre question est assez similaire à celui-ci

Vous pouvez enregistrer votre fichier/script en tant que .txt ou .sql et l'exécuter à partir de Sql Server Management Studio (je pense que le menu est Open/Query, puis il suffit d'exécuter la requête dans l'interface SSMS). Vous devrez peut-être mettre à jour la première ligne, indiquant la base de données à créer ou à sélectionner sur votre machine locale.

Si vous devez effectuer ce transfert de données très souvent, vous pouvez alors opter pour la réplication. En fonction de vos besoins, la réplication d'instantanés peut convenir. Si vous devez synchroniser les données entre vos deux serveurs, vous pouvez opter pour un modèle plus complexe tel que la réplication par fusion.

EDIT : Je n'avais pas remarqué que vous aviez des problèmes avec SSMS liés à la taille des fichiers. Ensuite vous pouvez opter pour la ligne de commande, comme proposé par d'autres, la réplication de snapshot (publier sur votre serveur principal, s'abonner sur votre serveur local, répliquer, puis se désabonner) ou même la sauvegarde/restauration

3 votes

Jack a mentionné qu'il ne peut pas le faire à partir de SSMS car le fichier est trop volumineux.

0voto

devio Points 22981

Pouvez-vous l'exécuter avec succès en utilisant osql ou sqlcmd ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X