Wie importiere ich eine große MS SQL-SQL-Datei?


240

Ich verwende RedGate SQL-Datenvergleich und generiere eine SQL-Datei, damit ich sie auf meinem lokalen Computer ausführen kann. Das Problem ist jedoch, dass die Datei mehr als 300 MB groß ist. Dies bedeutet, dass ich nicht kopieren und einfügen kann, da die Zwischenablage nicht damit umgehen kann. Wenn ich versuche, die Datei in SQL Server Management Studio zu öffnen, wird eine Fehlermeldung angezeigt über die Datei zu groß ist.

Gibt es eine Möglichkeit, eine große SQL-Datei auszuführen? Die Datei enthält grundsätzlich Daten für zwei neue Tabellen.

Antworten:


440

Starten Sie an der Eingabeaufforderung sqlcmd:

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

Ersetzen Sie einfach durch <server>den Speicherort Ihrer SQL-Box und <your file here>durch den Namen Ihres Skripts. Vergessen Sie nicht, wenn Sie eine SQL-Instanz verwenden, lautet die Syntax wie folgt:

sqlcmd -S <server>\instance.

Hier ist die Liste aller Argumente, die Sie an sqlcmd übergeben können:

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
Ich habe einige Beilagen wie : INSERT INTO table_name (text) VALUES ('some text bla bla 'bla' text'). Ich habe Fehler mit Anführungszeichen. SO Was muss ich verwenden (welcher Parameter), um diesen Fehler zu behandeln? Vielen Dank
Oleksandr Fentsyk

1
Können wir das Skript auf einem externen Laufwerk behalten? Wie E: fahren? statt C fahren?
Ani

10
Ich bestätige nur, dass ich gerade eine 1 GB SQL-Datei mit diesem Befehl ausgeführt habe
Loupax

11
Das hat bei mir funktioniert, aber ich musste das -o am Ende
bunggo

2
75G SQL-Datei konnte nicht ausgeführt werden.
Aladdin

62

Ich hatte genau das gleiche Problem und hatte eine Weile Probleme, dann fand ich endlich die Lösung, die darin besteht, den -aParameter auf sqlcmdzu setzen, um seine Standardpaketgröße zu ändern:

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

4
+1 zum Hinzufügen der Option -d im Beispiel. Ich habe "USE [DBNAME]" in meiner SQL-Datei verwendet. Das hat auch funktioniert. Nicht sicher, welche die bessere oder bevorzugte Methode ist
Shaakir

3
Vielen Dank. Ich habe den folgenden Befehl als Benutzernamen und Kennwort verwendet, um eine Verbindung zur Datenbank herzustellen. sqlcmd -S <Servername> -U <Username> -P <password> -d <Databasename> -i <filename>
Hriju

1
Welches Problem haben Sie durch Einstellen der Paketgröße gelöst? Microsoft sagt: "Eine größere Paketgröße kann die Leistung verbessern ..." ( docs.microsoft.com/en-us/sql/tools/sqlcmd-utility )
Der unglaubliche

20

Sie können dieses Tool auch verwenden. Es ist wirklich nützlich.

BigSqlRunner


Ich fand es auch nützlich, bis ich es mit einer 400-MB-SQL-Datei (voller INSERT-Anweisungen) ausführte. Nach 9-stündiger Ausführung wurde der Datenbank nichts hinzugefügt, aber BigSqlRunner verbrauchte zwischen 3 GB und 6 GB Speicher.
Martijn

Sehr hilfreich. Normalerweise teile ich die Datei (verschiedene Tools) manuell in Blöcke auf, bearbeite sie dann manuell, sodass die SQL-Anweisungen "ganz" sind, und führe sie dann über ein Batch-Skript aus. Das macht es so einfach. 2.3gb .sql Datei, einfach.
Barry

14
  1. Nehmen Sie die Eingabeaufforderung mit Administratorrechten

  2. Wechseln Sie in das Verzeichnis, in dem die SQL-Datei gespeichert ist

  3. Führen Sie den folgenden Befehl aus

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


7

Ich verwende MSSQL Express 2014 und keine der Lösungen hat für mich funktioniert. Sie alle haben gerade SQL zum Absturz gebracht. Da ich nur ein einmaliges Skript mit vielen einfachen Einfügeanweisungen ausführen musste, habe ich es umgangen, indem ich als letztes Mittel eine kleine Konsolen-App geschrieben habe:

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

Ich hatte ein ähnliches Problem. Meine Datei mit SQL-Skript war über 150 MB groß (mit fast 900 KB sehr einfachem INSERT ). Ich habe die von Takuro empfohlene Lösung verwendet (als Antwort auf diese Frage), aber es wurde immer noch eine Fehlermeldung mit der Meldung angezeigt, dass nicht genügend Speicher vorhanden ist ("Es ist nicht genügend Systemspeicher im Ressourcenpool 'intern' vorhanden, um diese Abfrage auszuführen").

Was mir geholfen hat war, dass ich nach jedem 50k INSERT den GO- Befehl setze s den .

(Es geht nicht direkt um die Frage (Dateigröße), aber ich glaube, es löst das Problem, das indirekt mit der Größe des SQL-Skripts selbst verbunden ist. In meinem Fall viele Einfügebefehle)


1

Ihre Frage ist ganz ähnlich wie diese

Sie können Ihre Datei / Ihr Skript als .txt oder .sql speichern und in SQL Server Management Studio ausführen (ich denke, das Menü ist Öffnen / Abfragen, dann führen Sie die Abfrage einfach in der SSMS-Oberfläche aus). Möglicherweise müssen Sie die erste Zeile aktualisieren und angeben, welche Datenbank auf Ihrem lokalen Computer erstellt oder ausgewählt werden soll.

Wenn Sie diese Datenübertragung sehr oft durchführen müssen, können Sie eine Replikation durchführen. Abhängig von Ihren Anforderungen kann die Snapshot-Replikation in Ordnung sein. Wenn Sie die Daten zwischen Ihren beiden Servern synchronisieren müssen, können Sie sich für ein komplexeres Modell wie die Zusammenführungsreplikation entscheiden.

EDIT: Ich habe nicht bemerkt, dass Sie Probleme mit SSMS im Zusammenhang mit der Dateigröße hatten. Anschließend können Sie, wie von anderen vorgeschlagen, über die Befehlszeile eine Snapshot-Replikation durchführen (auf Ihrem Hauptserver veröffentlichen, auf Ihrem lokalen Server abonnieren, replizieren und dann abbestellen) oder sogar sichern / wiederherstellen


3
Jack erwähnte, dass er dies nicht über SSMS tun kann, da die Datei zu groß ist.
Ray Booysen

1

Die Datei enthält grundsätzlich Daten für zwei neue Tabellen.

Dann ist es möglicherweise einfacher, die Daten nur über DTS (oder SSIS, wenn dies SQL Server 2005+ ist) zu übertragen, wenn sich die beiden Server im selben Netzwerk befinden.

Wenn sich die beiden Server nicht im selben Netzwerk befinden, können Sie die Quellendatenbank sichern und in einer neuen Datenbank auf dem Zielserver wiederherstellen. Anschließend können Sie INSERT INTO SELECTdie beiden Tabellen mit DTS / SSIS oder sogar einfach in die Zieldatenbank übertragen.


Wenn eine oder zwei Tabellen eine so große Datei generieren, kann man davon ausgehen, dass es sich bei der Datenbank um ein paar Gigs handelt, was das Sichern und Wiederherstellen in vielen Fällen unmöglich macht.
Kapitän Kenpachi

1

Hoffe das hilft dir!

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

1
-U <Benutzername> -P <Kennwort> Optionsbefehle sollten in Großbuchstaben und nicht in Kleinbuchstaben geschrieben werden
Eric XU

0

Ich bin auf dasselbe Problem gestoßen und habe einen ganzen Tag investiert, um den Ausweg zu finden. Dies wird jedoch behoben, indem die Kopie der SQL-Datei erstellt und die Erweiterung in die TXT-Datei geändert und die TXT-Datei im Chrome-Browser geöffnet wird. Ich habe die Magie gesehen und die Datei wird in einem Browser geöffnet.

Danke und viele Grüße,

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.