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

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

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

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
251
0
226 693
11
Перейти к ответу Данный вопрос помечен как решенный

Ответы 11

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

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

Примечание. sqlcmd заменяет osql.

Dominic Zukiewicz 19.02.2014 13:42
Ответ принят как подходящий

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

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

Просто замените <server> на местоположение вашего SQL-бокса и <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] 

У меня есть вставка типа: INSERT INTO table_name (text) VALUES ('some text bla bla 'bla' text'). У меня ошибка с кавычками. Итак, что мне нужно использовать (какой параметр) для обработки этой ошибки? Спасибо

Oleksandr Fentsyk 16.07.2013 00:49

Можем ли мы сохранить сценарий на внешнем диске? Нравится E: драйв? вместо диска C?

Ani 09.08.2013 21:35

Ага, ничто тебя не останавливает.

Ray Booysen 11.08.2013 21:07

Просто подтверждаю, что я только что запустил sql-файл размером 1 ГБ с помощью этой команды

Loupax 02.09.2014 18:54

Это сработало для меня, но мне пришлось избавиться от -o в конце

bunggo 12.12.2014 00:59

Я также удалил -o с конца и запустил файл размером 800 МБ. Также я разделил файл на схему (которая открывается в студии управления и может быть отредактирована) и данные, которые были импортированы через командную строку, потому что запуск всего файла в коробке без диска C: \ сбрасывал все мои таблицы в master.

Gareth Davidson 14.04.2015 19:47

Мой сервер sql использовал экземпляр по умолчанию (MSSQLSERVER), поэтому экземпляр -S <server> \ сбивал меня с толку. Если это ваш случай, вы можете просто запустить -S localhost (без экземпляра и с именем вашего сервера).

Robert Swilley 17.06.2016 17:53

К вашему сведению, SQL Server 2008 R2 запускал файлы размером от 400 МБ до 6 ГБ; работает по назначению.

Mayer M 16.02.2018 17:45

Подтверждаю, что я только что запустил sql-файл размером 11+ ГБ. и это прекрасно работает.

Biswajit Panday 22.12.2018 01:45

не удалось запустить файл sql размером 75 ГБ.

Aladdin 23.02.2019 14:43

Есть ли альтернатива этой команде для больших файлов sql?

Anders Lindén 24.04.2019 17:46

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

Ray Booysen 17.05.2019 05:06

Это потрясающе. Большое спасибо.

Timothy Macharia 28.05.2019 15:01

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

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

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

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

Джек упомянул, что он не может сделать это из SSMS, так как файл слишком велик.

Ray Booysen 11.01.2009 02:27

The file basically contain data for two new tables.

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

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

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

Captain Kenpachi 08.11.2012 15:19

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

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

+1 за добавление опции -d в примере. Я использовал "USE [DBNAME]" в моем файле sql. Это тоже сработало. Не уверен, какой метод лучше или предпочтительнее

Shaakir 26.01.2016 18:14

Спасибо. Я использовал следующую команду в качестве имени пользователя и пароля, необходимых для подключения к базе данных. sqlcmd -S <Servername> -U <Username> -P <password> -d <Databasename> -i <filename>

Hriju 25.02.2016 10:21

Какую проблему вы решили, задав размер пакета? Microsoft заявляет: «Большой размер пакета может повысить производительность ...» (docs.microsoft.com/en-us/sql/tools/sqlcmd-utility)

The incredible Jan 27.06.2017 11:26

@TheincredibleJan Я думаю, он имеет в виду это: stackoverflow.com/q/55881713/345659

JumpingJezza 25.09.2020 05:16

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

BigSqlRunner

Я тоже думал, что это полезно, пока не запустил его с файлом SQL размером 400 МБ (полным операторов INSERT). После 9 часов работы ничего не было добавлено в базу данных, но BigSqlRunner потреблял от 3 до 6 ГБ памяти.

Martijn 24.10.2017 10:27

Очень полезно. Обычно я вручную разбиваю файл (различные инструменты) на куски, затем вручную редактирую их, чтобы операторы sql были «целыми», а затем выполнялись с помощью пакетного сценария. Это делает это НАСТОЛЬКО просто. 2.3gb .sql файл, легко.

Barry 22.04.2018 04:39
  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();
    }
}

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

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

-U <имя пользователя> -P <пароль> Команды параметров должны быть в верхнем регистре, а не в нижнем регистре.

eric xu 11.10.2019 19:39

У меня была аналогичная проблема. Мой файл с sql-скриптом был размером более 150 МБ (с почти 900 КБ очень простых ВСТАВЛЯТЬ). Я использовал решение, рекомендованное Такуро (в качестве ответа на этот вопрос), но я все еще получал ошибку с сообщением о том, что недостаточно памяти («Недостаточно системной памяти во внутреннем пуле ресурсов для выполнения этого запроса»).

Мне помогло то, что я ставил команду ИДТИ после каждых 50k ВСТАВЛЯТЬ.

(Он не решает напрямую вопрос (размер файла), но я считаю, что он решает проблему, которая косвенно связана с большим размером самого sql-скрипта. В моем случае много команд вставки)

Я столкнулся с той же проблемой и потратил целый день, чтобы найти выход, но это было решено путем создания копии файла .sql, изменения расширения на файл .txt и открытия файла .txt в браузере Chrome. Я увидел волшебство, и файл открывается в браузере.

Спасибо и всего наилучшего,

Другие вопросы по теме