Як ви імпортуєте великий .sql файл MS SQL?


240

Я використовую дані RedGate SQL для порівняння та генерування .sql-файлу, щоб я міг запустити його на своїй локальній машині. Але проблема полягає в тому, що файл перевищує 300 Мб, це означає, що я не можу копіювати та вставляти, оскільки буфер обміну не зможе ним обробити, і коли я намагаюся відкрити файл у студії управління SQL Server, я отримую помилку про занадто великий файл.

Чи є спосіб запустити великий .sql файл? Файл, в основному, містить дані для двох нових таблиць.

Відповіді:


442

У командному рядку запустіть 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] 

1
У мене є вставки , як: INSERT INTO table_name (text) VALUES ('some text bla bla 'bla' text'). У мене помилка з цитатами. ТА Що мені потрібно використовувати (який параметр) для обробки цієї помилки? Спасибі
Олександр Фенцик

1
Чи можемо ми зберегти скрипт на зовнішньому диску? Як E: їхати? замість приводу C?
Ані

10
Щойно підтверджую, що я щойно запустив 1 Гб sql-файл за допомогою цієї команди
Loupax,

11
Це працювало для мене, але мені довелося позбутися від -o наприкінці
bunggo

2
не вдалося запустити файл 75G sql.
Аладдін

62

У мене було саме таку проблему, і я певний час боровся, а потім нарешті знайшов рішення, яке має встановити -aпараметр для sqlcmd, щоб змінити розмір пакету за замовчуванням:

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

4
+1 для додавання параметра -d у прикладі. Я використовував "USE [DBNAME]" у своєму файлі sql. Це також спрацювало. Не впевнений, який кращий чи бажаний метод
Шаакір

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

1
Яку проблему ви вирішили, встановивши розмір пакету? Microsoft каже: "Більший розмір пакета може підвищити продуктивність ..." ( docs.microsoft.com/en-us/sql/tools/sqlcmd-utility )
Неймовірний

20

Ви також можете використовувати цей інструмент. Це дійсно корисно.

BigSqlRunner


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

Дуже корисний. Зазвичай я вручну розбиваю файл (різні інструменти) на шматки, потім вручну редагую їх, щоб оператори sql були "цілими", а потім виконувати за допомогою пакетного сценарію. Це робить ТАК легко. 2.3gb .sql файл, легко.
Баррі

14
  1. Візьміть командний рядок з правами адміністратора

  2. Змініть каталог, де зберігається .sql файл

  3. Виконайте таку команду

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


7

Я використовую 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();
    }
}


2

У мене була подібна проблема. Мій файл із скриптом sql був розміром понад 150 Мб (майже 900 кВ дуже простих INSERT s). Я використовував рішення, яке радив Takuro (як відповідь у цьому питанні), але я все-таки отримав помилку з повідомленням про те, що не вистачає пам'яті ("В пулі ресурсів" внутрішнього "недостатньо системної пам'яті для запуску цього запиту).

Що мені допомогло, це те, що я ставив команду GO після кожні 50 К ВСТАВЛЕННЯ .

(Це не безпосередньо стосується питання (розмір файлу), але я вважаю, що це вирішує проблему, яка опосередковано пов'язана з великим розміром сценарію sql. У моєму випадку багато команд вставки)


1

Ваше запитання досить схоже на це

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

Якщо вам доведеться робити цю передачу даних дуже часто, ви можете піти на реплікацію. Залежно від ваших потреб, тиражування знімка може бути нормальним. Якщо вам доведеться синхронізувати дані між вашими двома серверами, ви можете зайти на більш складну модель, таку як реплікація злиття.

EDIT: Я не помітив, що у вас виникли проблеми із SSMS, пов’язаним із розміром файлу. Тоді ви можете перейти до командного рядка, як це запропонували інші, реплікації знімка (опублікувати на головному сервері, підписатися на локальному, копіювати, а потім скасувати підписку) або навіть створити резервну копію / відновлення


3
Джек зазначив, що він не може зробити це з SSMS, оскільки файл занадто великий.
Рей Буйсен

1

Файл, в основному, містить дані для двох нових таблиць.

Тоді вам може бути простішим лише дані DTS (або SSIS, якщо це SQL Server 2005+), якщо два сервери знаходяться в одній мережі.

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


Якщо одна або дві таблиці генерують такий великий файл, можна припустити, що БД - це пара Gigs, що робить резервне копіювання та відновлення неможливим у багатьох випадках.
Капітан Кенпачі

1

Сподіваюся, це допоможе тобі!

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

1
-U <ім'я користувача> -П <пароль> Команди опцій повинні мати верхній регістр, а не малі
eric xu

0

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

Дякую і всього найкращого,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.