Как обрабатывать большие пакетные вставки SQL SERVER?

Я хочу выполнить серию запросов в рамках проекта миграции. Сценарии, которые должны быть сгенерированы, создаются инструментом, который анализирует устаревшую базу данных, а затем создает сценарий для сопоставления каждой из старых сущностей с соответствующей новой записью. Сценарии хорошо работают для небольших объектов, но некоторые имеют записи в сотнях тысяч, которые создают файлы сценариев размером около 80 МБ.

Как лучше всего запускать эти скрипты?

Есть ли в приглашении какой-нибудь SQLCMD, который имеет дело с более крупными скриптами?

Я также мог бы разбить сценарии на более мелкие сценарии, но я не хочу, чтобы мне приходилось выполнять сотни сценариев для выполнения миграции.

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

Ответы 5

Если возможно, измените инструмент экспорта для экспорта файла, совместимого с BULK INSERT.

Запретив это, вы можете написать программу, которая будет анализировать операторы вставки во что-то, что примет BULK INSERT.

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

Возможно, вам лучше взглянуть на ETL (DTS, SSIS, BCP или BULK INSERT FROM или какой-либо другой инструмент) для переноса данных вместо того, чтобы создавать сценарии для каждой вставки.

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

Просто выполните сценарий. Мы регулярно запускаем скрипты резервного копирования / восстановления размером 100 Мбайт. Это займет всего 30 секунд или около того.

Если критически важно не блокировать ваш сервер на это время, вам придется немного его разделить.

Также обратите внимание на параметр -tab mysqldump с выводом данных с использованием TO OUTFILE, который более эффективен и быстрее загружается.

Я искал опцию «BULK INSERT» из файла, но не вижу никаких примеров формата файла. Может ли файл смешивать форматы строк или всегда должен быть согласован в стиле CSV? Причина, по которой я спрашиваю, заключается в том, что у меня есть идентификаторы, задействованные в различных родительских / дочерних таблицах, поэтому в настоящее время используются вставки для каждой строки.

BULK INSERT использует Файлы формата BCP, которые бывают традиционными (не XML) или XML. Должен ли он получить новую личность и использовать его в ребенке, и вам не сойдет с рук использование SET IDENTITY INSERT ON, потому что дизайн базы данных сильно изменился? Если это так, я думаю, вам может быть лучше использовать SSIS или аналогичный и выполнить объединение слиянием после назначения идентификаторов. Вы также можете загрузить данные в промежуточные таблицы в SQL с помощью SSIS или BCP, а затем использовать обычный SQL (возможно, в SSIS в задаче SQL) с функцией OUTPUT INTO, чтобы запечатлеть личности и использовать их в детях.

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