SQL Server - запуск больших файлов сценариев

У меня есть таблица базы данных на сервере разработки, которая теперь полностью заполнена после того, как я запустил ее с помощью процедуры импорта для файла CSV, содержащего 1,4 миллиона строк.

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

Есть идеи, как запустить этот SQL-скрипт?

Я задал аналогичный вопрос по DBA и получил довольно хорошие отзывы (dba.stackexchange.com/questions/16763/…)

spaghetticowboy 23.04.2012 17:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
66
1
63 891
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

используйте инструмент sqlcmd для выполнения файла ..

sqlcmd -S myServer\instanceName -i C:\myScript.sql

Если у вас есть необъяснимая «ошибка сценария» для больших файлов sql (> 100 МБ), которая включает несколько INSERT, просто замените «INSERT INTO» на «GO INSERT INTO» в вашем файле, что уменьшит размер транзакции.

Используя этот метод, я получаю сообщение об ошибке «Sqlcmd: Error: Scripting error». Это связано с размером файла?

tags2k 21.10.2008 20:16

сначала проверьте подключение. возможно, вам нужно передать имя пользователя и пароль (параметры -U -P). Можете ли вы также попробовать с файлом меньшего размера. Я без проблем запускал огромные скрипты.

Gulzar Nazim 21.10.2008 20:18

Если я уберу все, кроме 15 операторов INSERT, все заработает. Если я верну в него остальные 1 410 472 оператора, это сообщение об ошибке выйдет из строя.

tags2k 21.10.2008 20:27

Все ли эти утверждения внутри транзакции? возможно, время истекает. попробуйте установить тайм-аут на 0 (бесконечный), прежде чем запускать это.

Gulzar Nazim 21.10.2008 20:32

здесь ведется некоторая деятельность по обсуждению текстовых редакторов больших файлов stackoverflow.com/questions/222853/…

Gulzar Nazim 21.10.2008 22:56

sqlcmd, к сожалению, загружает весь файл. На самом деле кажется, что он потребляет намного больше памяти, чем размер файла.

usr 12.06.2015 00:16
Ответ принят как подходящий

Запускать что-то настолько большое внутри одной транзакции - не лучшая идея. Поэтому я бы рекомендовал разбить файл на более мелкие и более управляемые куски.

Другой вариант - изучить другие способы прямого импорта данных CSV.

Ответ Гульзар Назим - лучший ответ.

Feryt 29.07.2011 09:42

@feryt, это может быть ваше мнение, но это не то, что решил OP, и Майкл также не виноват в том, что вам больше нравится чей-то ответ (даже если другой ответ не решил проблему OP).

Aaron Bertrand 19.04.2012 18:45

Почему бы просто не использовать DTS для прямого импорта файла CSV?

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

tags2k 22.10.2008 14:58

Этот инструмент (Средство запуска файла сценария 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 

Пауза

И здесь мы идем!!

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