У нас есть устаревшая система (MAS200, если вам нужно знать), и есть старый скрипт vbs, который извлекает данные из MAS и заполняет две промежуточные таблицы в нашей производственной базе данных SQL. И после некоторой обработки/очистки эти данные попадают в фактические таблицы.Импорт данных через хранимую процедуру или триггеры
Data flow : MAS200 --> Staging tables --> Production table
Для упрощения рассмотрим родительскую таблицу «Заказ» и детскую таблицу «Элементы». Заказ может иметь несколько элементов, каждый элемент записи будет иметь FK OrderId. Таким образом, во время импорта сначала мы импортируем данные заказа и создаем запись в таблице «Заказ», а затем извлекаем записи «Элементы» и импортируем их.
Существующие TRIGGER подход, основанный - В настоящее время мы в два Триггеры - по одному на каждой промежуточной таблицы (Order & Items). Таким образом, каждая новая вставка используется, и после обработки данных в фактическую производственную таблицу вставляется новая запись. Моя единственная проблема заключается в том, что триггер выполняется для каждой записи Items вместо BULK insert. И это кажется менее управляемым.
SP Подход, основанный на - Если удалить оба Триггеры затем импортировать данные в таблицы промежуточного хранения и, наконец, выполнить SP, который будет импортировать данные Order, а затем выполнить BULK вставить в таблицу Items. Это может быть более эффективным/быстрым?
Это не сравнение на самом деле просто разностного дизайна. Я хотел бы знать, какой из них лучше, или если есть 3-й лучший подход к импорту из MAS в производственный SQL db.
EDIT 1: Спасибо. Как и многие другие, объем данных не является большим или слишком частым. Давайте скажем 10-12 заказов (с 20-30 предметами) каждый час. Также с TRIGGERs мы думали, что мы не получаем TRANSACTION, но достаточно только двух простых TRIGGER. Я считаю, что с SP требуется больше скриптов.
Цель: необходимо обеспечить ее простоту, чистоту и эффективность.
Являются ли ваши промежуточные таблицы на том же сервере, что и производственные таблицы? –
Да, обе таблицы стажа и prod находятся в одной и той же БД. Тем не менее, MAS и скрипт vbs находятся на сервере diff. Также, если предметы больше, мы сталкиваемся с задержкой. –
Если бы я делал это, я бы использовал SP, так как это почти наверняка будет быстрее и позволит вам лучше контролировать свои транзакции. В зависимости от объема передаваемых данных я бы выбрал между BULK INSERT (после того, что предлагает @elirevach) для больших объемов данных, или с помощью обычного INSERT (или MERGE, если некоторые столбцы могут меняться) более умеренных размеров. –