Comment importer un gros fichier MS SQL .sql?


240

J'utilise la comparaison de données RedGate SQL 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 dépasse 300 Mo, ce qui signifie que je ne peux pas faire de copier-coller car le presse-papiers ne sera pas en mesure de le gérer, et lorsque j'essaie d'ouvrir le fichier dans SQL Server Management Studio, j'obtiens une erreur 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.

Réponses:


442

À partir de l'invite de commande, démarrez sqlcmd:

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

Remplacez-le simplement <server>par l'emplacement de votre boîte SQL et <your file here>par 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] 

1
J'ai un peu comme insert: INSERT INTO table_name (text) VALUES ('some text bla bla 'bla' text'). J'ai une erreur avec les citations. SO Que dois-je utiliser (quel paramètre) pour gérer cette erreur? Merci
Oleksandr Fentsyk

1
Pouvons-nous conserver le script sur un disque externe? Comme E: conduire? au lieu du lecteur C?
Ani

10
Je confirme simplement que je viens d'exécuter un fichier sql de 1 Go à l'aide de cette commande
Loupax

11
Cela a fonctionné pour moi, mais j'ai dû me débarrasser du -o à la fin
bunggo

2
il n'a pas pu exécuter le fichier sql 75G.
Aladdin

62

J'avais exactement le même problème et je luttais depuis un moment, puis j'ai finalement trouvé la solution qui consiste à définir le -aparamètre sur sqlcmdafin de changer sa taille de paquet par défaut:

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

4
+1 pour l'ajout de 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
Shaakir

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

1
Quel problème avez-vous résolu en définissant la taille du paquet? Microsoft dit: "Une plus grande taille de paquet peut améliorer les performances ..." ( docs.microsoft.com/en-us/sql/tools/sqlcmd-utility )
L'incroyable

20

Vous pouvez également utiliser cet outil. C'est vraiment utile.

BigSqlRunner


Je pensais que c'était utile aussi, jusqu'à ce que je l'exécute avec un fichier SQL de 400 Mo (plein d'instructions INSERT). Après 9 heures de fonctionnement, rien n'avait été ajouté à la base de données, mais BigSqlRunner consommait entre 3 Go et 6 Go de mémoire.
Martijn

Très utile. Habituellement, je divise manuellement le fichier (divers outils) en morceaux, puis les modifie manuellement pour que les instructions sql soient «entières», puis je l'exécute via un script batch. Cela rend TELLEMENT facile. Fichier 2,3 Go .sql, facile.
Barry

14
  1. Prendre l'invite de commande avec des privilèges d'administrateur

  2. Modifiez le répertoire dans lequel le fichier .sql est stocké

  3. Exécutez la commande suivante

    sqlcmd -S 'your server name' -U 'user name of server' -P 'password of server' -d 'db name'-i script.sql


7

J'utilise MSSQL Express 2014 et aucune des solutions n'a fonctionné pour moi. Ils ont tous juste écrasé SQL. Comme je n'avais besoin que d' exécuter un script unique avec de nombreuses instructions d'insertion simples, je l'ai contourné en écrivant une petite application console en tout dernier recours:

class Program
{
    static void Main(string[] args)
    {
        RunScript();
    }

    private static void RunScript()
    {
        My_DataEntities db = new My_DataEntities();

        string line;

        System.IO.StreamReader file =
           new System.IO.StreamReader("c:\\ukpostcodesmssql.sql");
        while ((line = file.ReadLine()) != null)
        {
            db.Database.ExecuteSqlCommand(line);
        }

        file.Close();
    }
}


2

J'ai eu un problème similaire. Mon fichier avec le script sql était sur 150MB de taille (presque 900k de très simple INSERT s). J'ai utilisé la solution conseillée par Takuro (comme réponse à cette question) mais j'ai quand même eu une erreur avec un message disant qu'il n'y avait pas assez de mémoire ("Il n'y a pas assez de mémoire système dans le pool de ressources 'interne' pour exécuter cette requête").

Ce qui m'a aidé, c'est que je mets la commande GO après chaque 50 000 INSERT .

(Il ne s'agit pas directement de la question (taille du fichier) mais je pense que cela résout le problème qui est indirectement lié à la grande taille du script sql lui-même. Dans mon cas, de nombreuses commandes d'insertion)


1

Votre question est assez similaire à celle-ci

Vous pouvez enregistrer votre fichier / script au format .txt ou .sql et l'exécuter à partir de Sql Server Management Studio (je pense que le menu est Ouvrir / Requête, puis exécutez simplement 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. Selon vos besoins, la réplication d'instantanés peut être correcte. 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 de fusion.

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


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

1

Le fichier contient essentiellement des données pour deux nouvelles tables.

Ensuite, vous pouvez trouver plus simple de simplement DTS (ou SSIS, s'il s'agit de SQL Server 2005+) sur les données, si les deux serveurs sont sur le même réseau.

Si les deux serveurs ne sont pas sur le même réseau, vous pouvez sauvegarder la base de données source et la restaurer dans une nouvelle base de données sur le serveur de destination. Ensuite, vous pouvez utiliser DTS / SSIS, ou même un simple INSERT INTO SELECT, pour transférer les deux tables vers la base de données de destination.


Si une ou deux tables génèrent un fichier aussi volumineux, il est sûr de supposer que la base de données est un couple de concerts, ce qui rend la sauvegarde et la restauration irréalisables dans de nombreux cas.
Capitaine Kenpachi

1

J'espère que cela vous aidera!

sqlcmd -u UserName -s <ServerName\InstanceName> -i U:\<Path>\script.sql

1
-U <nom d'utilisateur> -P <mot de passe> Les commandes d'options doivent être en majuscules et non en minuscules
eric xu

0

J'ai rencontré le même problème et investi une journée entière pour trouver le moyen de sortir, mais cela est résolu en faisant la copie du fichier .sql et en modifiant l'extension en fichier .txt et en ouvrant le fichier .txt dans le navigateur Chrome. J'ai vu la magie et le fichier est ouvert dans un navigateur.

Merci et meilleures salutations,

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.