web-dev-qa-db-fra.com

Comment importer un fichier .sql MS SQL volumineux?

J'utilise les données SQL RedGate pour comparer et générer 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. Cela signifie que je ne peux pas copier-coller car le presse-papier ne pourra pas le gérer. Lorsque j'essaye d'ouvrir le fichier dans SQL Server Management Studio, un message d'erreur s'affiche. sur le fichier étant 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.

221
Jack

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

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

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

sqlcmd -S <server>\instance.

Voici la liste de tous les arguments que vous pouvez transmettre à 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] 
410
Ray Booysen

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 paramètre -a sur sqlcmd afin de modifier la taille de paquet par défaut:

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

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

BigSqlRunner

19
Yigit Yuksel
  1. Prendre une invite de commande avec les privilèges d'administrateur
  2. Change le répertoire où le fichier .sql est stocké
  3. Exécuter la commande suivante

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

12
Syam Kumar

J'utilise MSSQL Express 2014 et aucune des solutions n'a fonctionné pour moi. Ils ont tous planté SQL. Comme je n'avais besoin que de exécuter un script unique avec de nombreuses instructions d'insertion simples, je l'ai contourné en écrivant une petite application pour 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();
    }
}
5

Exécutez-le en ligne de commande avec osql, voir ici:

http://metrix.fcny.org/wiki/display/dev/How+to+execute+a+.SQL+script+using+OSQL

2
BobbyShaftoe

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 il suffit d'exécuter la requête dans l'interface SSMS). Vous devrez peut-être mettre à jour la première ligne en indiquant la base de données à créer ou à sélectionner sur votre ordinateur local.

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’images instantanées 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é à la taille du fichier. Ensuite, vous pouvez utiliser la ligne de commande, comme proposé par d’autres, la réplication d’instantanés (publication sur votre serveur principal, abonnement local, répliquer, puis vous désabonner) ou même sauvegarde/restauration.

1
Philippe Grondier

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

Ensuite, vous trouverez peut-être plus simple de simplement DTS (ou SSIS, s'il s'agit de SQL Server 2005+) les données, si les deux serveurs se trouvent 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. Vous pouvez ensuite utiliser DTS/SSIS, ou même un simple INSERT INTO SELECT, pour transférer les deux tables dans la base de données de destination.

1
P Daddy

espérons que cela vous aide!

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

J'ai eu le même problème. Mon fichier avec script SQL faisait plus de 150 Mo de taille (avec près de 900 Ko de très simple INSÉRER s). J'ai utilisé une 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 ("La mémoire système est insuffisante dans le pool de ressources" interne "pour exécuter cette requête").

Ce qui m’a aidé, c’est que j’ai mis la commande GO tous les 50k INSÉRER s.

(Cela ne traite pas directement de la question (taille du fichier), mais je crois qu'il résout le problème qui est indirectement lié à la taille importante du script SQL lui-même. Dans mon cas, de nombreuses commandes d'insertion)

1
Bronek