Как импортировать большой MS SQL.sql-файл?

Я использую RedGate SQL Data compare и сгенерировал .sql-файл, чтобы я мог запустить его на своей локальной машине. Но проблема в том, что файл превышает 300 Мб, что означает, что я не могу копировать и вставлять, потому что буфер обмена не сможет его обработать, и когда я пытаюсь открыть файл в SQL Server Management Studio, я получаю ошибку о том, что файл слишком большой.

есть ли способ запустить большой .sql-файл? Файл содержит данные для двух новых таблиц.

9 ответов


из командной строки, запуск sqlcmd:

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

просто заменить <server> С расположением вашего SQL box и <your file here> С именем вашего скрипта. Не забывайте, что если вы используете экземпляр SQL, синтаксис:

sqlcmd -S <server>\instance.

вот список всех аргументов, которые вы можете передать 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] 

у меня была точно такая же проблема, и я боролся некоторое время, а затем, наконец, нашел решение, которое должно установить до sqlcmd чтобы изменить размер пакета по умолчанию:

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

вы также можете использовать этот инструмент. Это действительно полезно.

BigSqlRunner


  1. берем командную строку с правами администратора
  2. изменить каталог, где .сохраненный файл sql
  3. выполните следующую команду

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


Я использую MSSQL Express 2014, и ни одно из решений не работало для меня. Они все просто разбили SQL. Как мне только нужно было запустить один скрипт со многими простыми инструкциями вставки я обошел его, написав небольшое консольное приложение в крайнем случае:

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();
    }
}

запустить его в командной строке с osql, см. здесь:

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


Ваш вопрос очень похож на этот

вы можете сохранить файл/скрипт .txt или .sql и запустите его из SQL Server Management Studio (я думаю, что меню открыто/Query, а затем просто запустите запрос в интерфейсе SSMS). Вам нужно обновить первую строку, указав базу данных, которая будет создана или выбрана на вашем локальном компьютере.

Если вам приходится делать эту передачу данных очень часто, вы можете пойти на репликацию. В зависимости от ваших потребностей, репликация моментальных снимков может быть в порядке. Если вам нужно синхронизировать данные между двумя серверами, вы можете перейти к более сложной модели, такой как репликация слиянием.

EDIT: я не заметил, что у вас были проблемы с SSMS, связанные с размером файла. Затем вы можете перейти в командную строку, как предлагают другие, репликация моментальных снимков (опубликовать на главном сервере, подписаться на локальном, реплицировать, а затем отменить подписку) или даже резервное копирование/восстановление


файл в основном содержит данные для двух новых таблиц.

тогда вам может показаться проще просто DTS (или SSIS, если это SQL Server 2005+) данные, если два сервера находятся в одной сети.

Если два сервера не находятся в одной сети, можно создать резервную копию исходной базы данных и восстановить ее в новой базе данных на целевом сервере. Затем вы можете использовать DTS / SSIS или даже простой INSERT INTO SELECT, чтобы передать две таблицы в пункт назначения база данных.


надеюсь, это поможет вам!

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