Jak zaimportować duży plik .sql MS SQL?


240

Korzystam z porównania danych RedGate SQL i wygenerowałem plik .sql, dzięki czemu mogłem go uruchomić na moim komputerze lokalnym. Problem polega jednak na tym, że rozmiar pliku przekracza 300 MB, co oznacza, że ​​nie mogę kopiować i wklejać, ponieważ schowek nie będzie w stanie go obsłużyć, a gdy próbuję otworzyć plik w SQL Server Management Studio, pojawia się błąd o zbyt dużym pliku.

Czy istnieje sposób na uruchomienie dużego pliku .sql? Plik zasadniczo zawiera dane dla dwóch nowych tabel.

Odpowiedzi:


442

W wierszu polecenia uruchom sqlcmd:

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

Wystarczy zastąpić <server>lokalizacją swojego pola SQL i <your file here>nazwą skryptu. Nie zapomnij, jeśli używasz instancji SQL, składnia jest następująca:

sqlcmd -S <server>\instance.

Oto lista wszystkich argumentów, które możesz przekazać 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
Mam wkładkę takiego: INSERT INTO table_name (text) VALUES ('some text bla bla 'bla' text'). Mam błąd w cytatach. SO Czego muszę użyć (który parametr) do obsługi tego błędu? Dzięki
Oleksandr Fentsyk

1
Czy możemy przechowywać skrypt na dysku zewnętrznym? Jak E: dysk? zamiast dysku C?
Ani

10
Potwierdzam, że właśnie uruchomiłem plik 1GB sql za pomocą tego polecenia
Loupax

11
To działało dla mnie, ale musiałem pozbyć się -o na końcu
bunggo

2
nie udało się uruchomić pliku 75G sql.
Aladdin

62

Miałem dokładnie ten sam problem i walczyłem przez jakiś czas, a potem w końcu znalazłem rozwiązanie polegające na ustawieniu -aparametru na sqlcmdw celu zmiany domyślnego rozmiaru pakietu:

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

4
+1 za dodanie opcji -d w przykładzie. Użyłem „USE [DBNAME]” w moim pliku SQL. To też działało. Nie jestem pewien, która metoda jest lepsza lub preferowana
Shaakir

3
Dzięki. Użyłem następującego polecenia jako nazwy użytkownika i hasła wymaganego do połączenia z bazą danych. sqlcmd -S <Servername> -U <Username> -P <password> -d <Databasename> -i <filename>
Hriju

1
Który problem rozwiązałeś, ustawiając rozmiar pakietu? Microsoft mówi: „Większy rozmiar pakietu może zwiększyć wydajność ...” ( docs.microsoft.com/en-us/sql/tools/sqlcmd-utility )
niesamowity

20

Możesz także użyć tego narzędzia. To jest naprawdę przydatne.

BigSqlRunner


Myślałem, że to też jest przydatne, dopóki nie uruchomiłem go z 400 MB plikiem SQL (pełnym instrukcji INSERT). Po 9 godzinach działania nic nie zostało dodane do bazy danych, ale BigSqlRunner zużywał od 3 GB do 6 GB pamięci.
Martijn

Bardzo przydatne. Zwykle ręcznie dzielę plik (różne narzędzia) na części, a następnie ręcznie je edytuję, aby instrukcje sql były „całe”, a następnie uruchamiane za pomocą skryptu wsadowego. To sprawia, że ​​tak łatwo. Plik .sql 2,3 GB, łatwy.
Barry

14
  1. Weź wiersz polecenia z uprawnieniami administratora

  2. Przejdź do katalogu, w którym znajduje się plik .sql

  3. Wykonaj następujące polecenie

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


7

Korzystam z MSSQL Express 2014 i żadne z rozwiązań nie zadziałało. Wszyscy po prostu rozbili SQL. Ponieważ wystarczyło mi tylko uruchomić skrypt jednorazowy z wieloma prostymi instrukcjami wstawiania, obejrzałem go, pisząc małą aplikację konsolową w ostateczności:

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

Miałem podobny problem. Mój plik SQL skryptu było ponad 150MB wielkości (prawie 900K bardzo proste INSERT s). Użyłem rozwiązania zalecanego przez Takuro (jako odpowiedź w tym pytaniu), ale nadal pojawia się błąd z komunikatem informującym, że nie ma wystarczającej ilości pamięci („Brak wystarczającej pamięci systemowej w puli zasobów„ wewnętrznej ”do uruchomienia tego zapytania”).

Pomogło mi to, że wstawiałem polecenie GO po każdych 50 000 WSTAWEK .

(Nie odnosi się bezpośrednio do pytania (rozmiaru pliku), ale uważam, że rozwiązuje problem pośrednio związany z dużym rozmiarem samego skryptu sql. W moim przypadku wiele poleceń wstawiania)


1

Twoje pytanie jest bardzo podobne do tego

Możesz zapisać plik / skrypt jako .txt lub .sql i uruchomić go z Sql Server Management Studio (myślę, że menu to Open / Query, a następnie po prostu uruchom zapytanie w interfejsie SSMS). Możesz zaktualizować pierwszy wiersz, wskazując bazę danych, która ma zostać utworzona lub wybrana na komputerze lokalnym.

Jeśli musisz często przesyłać dane, możesz przejść do replikacji. W zależności od potrzeb replikacja migawki może być w porządku. Jeśli musisz zsynchronizować dane między dwoma serwerami, możesz wybrać bardziej złożony model, na przykład replikację scalającą.

EDYCJA: Nie zauważyłem, że masz problemy z SSMS związane z rozmiarem pliku. Następnie możesz przejść do wiersza poleceń, zgodnie z propozycją innych, replikacji migawek (opublikuj na głównym serwerze, subskrybuj na lokalnym, replikuj, a następnie anuluj subskrypcję) lub nawet wykonaj kopię zapasową / przywróć


3
Jack wspomniał, że nie może tego zrobić z SSMS, ponieważ plik jest zbyt duży.
Ray Booysen

1

Plik zasadniczo zawiera dane dla dwóch nowych tabel.

Wtedy może okazać się łatwiejsze po prostu DTS (lub SSIS, jeśli jest to SQL Server 2005+) przesyłanie danych, jeśli dwa serwery są w tej samej sieci.

Jeśli dwa serwery nie są w tej samej sieci, możesz wykonać kopię zapasową źródłowej bazy danych i przywrócić ją do nowej bazy danych na serwerze docelowym. Następnie możesz użyć DTS / SSIS lub nawet zwykłego INSERT INTO SELECT, aby przenieść dwie tabele do docelowej bazy danych.


Jeśli jedna lub dwie tabele generują tak duży plik, można bezpiecznie założyć, że DB to kilka Gigs, co w wielu przypadkach uniemożliwia tworzenie kopii zapasowych i przywracanie.
Kapitan Kenpachi,

1

Mam nadzieję, że ci to pomoże!

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

1
-U <nazwa użytkownika> -P <hasło> Polecenia opcji powinny być pisane wielkimi, a nie małymi literami
eric xu

0

Zetknąłem się z tym samym problemem i zainwestowałem cały dzień, aby znaleźć wyjście, ale problem można rozwiązać, tworząc kopię pliku .sql i zmieniając rozszerzenie na plik .txt i otwierając plik .txt w przeglądarce Chrome. Widziałem magię i plik otwiera się w przeglądarce.

Dziękuję i pozdrawiam,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.