У меня есть таблица базы данных на сервере разработки, которая теперь полностью заполнена после того, как я запустил ее с помощью процедуры импорта для файла CSV, содержащего 1,4 миллиона строк.
Я запустил мастер публикации базы данных на столе, и теперь у меня есть сценарий SQL размером 286 МБ на моем локальном компьютере. Проблема в том, что я не могу понять, как его запустить. Если я загружаю его в SQL Server Management Studio Express, я получаю окно предупреждения, в котором говорится: «Операция не может быть завершена».
Есть идеи, как запустить этот SQL-скрипт?





используйте инструмент sqlcmd для выполнения файла ..
sqlcmd -S myServer\instanceName -i C:\myScript.sql
Если у вас есть необъяснимая «ошибка сценария» для больших файлов sql (> 100 МБ), которая включает несколько INSERT, просто замените «INSERT INTO» на «GO INSERT INTO» в вашем файле, что уменьшит размер транзакции.
Используя этот метод, я получаю сообщение об ошибке «Sqlcmd: Error: Scripting error». Это связано с размером файла?
сначала проверьте подключение. возможно, вам нужно передать имя пользователя и пароль (параметры -U -P). Можете ли вы также попробовать с файлом меньшего размера. Я без проблем запускал огромные скрипты.
Если я уберу все, кроме 15 операторов INSERT, все заработает. Если я верну в него остальные 1 410 472 оператора, это сообщение об ошибке выйдет из строя.
Все ли эти утверждения внутри транзакции? возможно, время истекает. попробуйте установить тайм-аут на 0 (бесконечный), прежде чем запускать это.
здесь ведется некоторая деятельность по обсуждению текстовых редакторов больших файлов stackoverflow.com/questions/222853/…
sqlcmd, к сожалению, загружает весь файл. На самом деле кажется, что он потребляет намного больше памяти, чем размер файла.
Запускать что-то настолько большое внутри одной транзакции - не лучшая идея. Поэтому я бы рекомендовал разбить файл на более мелкие и более управляемые куски.
Другой вариант - изучить другие способы прямого импорта данных CSV.
Ответ Гульзар Назим - лучший ответ.
@feryt, это может быть ваше мнение, но это не то, что решил OP, и Майкл также не виноват в том, что вам больше нравится чей-то ответ (даже если другой ответ не решил проблему OP).
Почему бы просто не использовать DTS для прямого импорта файла CSV?
Сначала необходимо выполнить кучу обработки данных, которую я не хочу запускать на реальном сервере. Следовательно, мне нужно иметь возможность обрабатывать данные в простом сценарии SQL, чтобы минимизировать объем работы, необходимой для этого блока.
Этот инструмент (Средство запуска файла сценария Big SQL) на CodePlex будет запускать файл сценария любого размера с журналом и графическим интерфейсом.
Добавляем к ответу Гульзар Назим:
Если ошибка по-прежнему возникает, попробуйте указать кодовая страница вашего файла SQL, используя опцию -f:
sqlcmd -S myServer\instanceName -d databaseName -i C:\myScript.sql -f 65001
Я пытался импортировать файл .dump из SQLite (по умолчанию UTF-8), а sqlcmd продолжал выдавать ошибку после встречи с первым специальным символом. -f 65001 исправил это для меня.
Да, мы могли бы это сделать, я попробовал использовать подход BCP (программа массового копирования), чтобы избежать проблемы OutOfMemory.
Примечание. Испытано в SQLServer 2014.
В BCP сначала нам нужно экспортировать данные исходной базы данных в файл bcp (в папке локального каталога), а затем нужно импортировать этот файл bcp в исходную базу данных.
Ниже приведены шаги прогулки по торту:
Примечание:
а) Убедитесь, что в целевой базе данных присутствует пустая таблица.
б) Убедитесь, что папка Temp присутствует на диске C
1) Создайте файл летучей мыши с именем 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) Затем создайте другой файл летучей мыши с именем 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
Пауза
И здесь мы идем!!
Я задал аналогичный вопрос по DBA и получил довольно хорошие отзывы (dba.stackexchange.com/questions/16763/…)