SQL Server - запуск больших файлов script
У меня есть таблица базы данных на сервере разработки, которая теперь полностью заполнена после того, как я установил ее с помощью процедуры импорта для файла CSV, содержащего 1,4 миллиона строк.
Я запустил мастер публикации базы данных в таблице, и теперь у меня есть 286 МБ SQL script на моем локальном компьютере. Проблема в том, что я не могу понять, как ее запустить. Если я загружу его в SQL Server Management Studio Express, я получаю окно предупреждения, в котором говорится: "Операция не может быть завершена".
Любые идеи о том, как я могу запустить этот SQL script?
Ответы
Ответ 1
Запуск чего-то большого внутри одной транзакции не является хорошей идеей. Поэтому я бы рекомендовал разбить файл на более мелкие, более управляемые куски.
Другой вариант - посмотреть на некоторые другие способы импорта CSV-данных напрямую.
Ответ 2
используйте инструмент sqlcmd для запуска файла..
sqlcmd -S myServer\instanceName -i C:\myScript.sql
В случае, если у вас есть необъяснимая "ошибка скрипта" для больших файлов sql (> 100 МБ), которая включает в себя несколько INSERT, просто замените "INSERT INTO" на "GO INSERT INTO" в вашем файле, что уменьшит размер транзакции.
Ответ 3
Этот инструмент (Big SQL Script File Runner) на CodePlex будет запускать любой размер Script с журналом и графическим интерфейсом.
Ответ 4
Добавление к Гульзару Назиму:
Если вы по-прежнему получаете сбой, попробуйте указать кодовую страницу вашего файла SQL с помощью опции -f
:
sqlcmd -S myServer\instanceName -d databaseName -i C:\myScript.sql -f 65001
Я пытался импортировать файл .dump из SQLite (по умолчанию UTF-8), и sqlcmd продолжал бросать ошибку после столкновения с первым специальным символом. -f 65001
исправил это для меня.
Ответ 5
Почему бы просто не использовать DTS для импорта CSV файла напрямую?
Ответ 6
Да, мы могли бы сделать это, я пытался использовать подход BCP (Bulk Copy Program), чтобы избежать проблемы OutOfMemory.
Примечание: пробовал в SQLServer 2014
В BCP сначала нам нужно экспортировать данные исходной базы данных в файл bcp (в папке локального каталога), а затем импортировать этот файл bcp в исходную базу данных
![enter image description here]()
Ниже приведены шаги по пирогу:
Замечания:
а) Убедитесь, что пустая таблица присутствует в базе данных назначения
б) Убедитесь, что папка Temp присутствует на диске C
1) Создайте файл bat с именем Export_Data.bat с помощью приведенной ниже команды
bcp.exe [Source_DataBase_Name].[dbo].[TableName] OUT "C:\Temp\TableName.bcp" -S "Computer Name" -U "SQL Server UserName" -P "SQL Server Password" -n -q
Пауза
2) Запустите этот bat файл, в результате чего bcp файл будет сгенерирован в папке Temp.
3) Затем создайте другой файл bat с именем Import_Data.bat с помощью приведенной ниже команды.
bcp.exe [Destination_DataBase_Name].[dbo].[TableName] IN "C:\Temp\TableName.bcp" -S "Computer Name" -U "SQL Server UserName" -P "SQL Server Password" -n -q
Пауза
И здесь мы идем!!