Execute SQL
не подходит для передачи данных. Он не может ни пакетировать данные, ни преобразовывать их. Это работа задач Dataflow. Задачи потока данных позволяют считывать исходные данные, используя курсор пожарного шланга, и записывать их в цель данных с помощью пакетных операций с использованием минимального ведения журнала. Его скорость зависит от исходного запроса. Медленный запрос приведет к медленному выполнению.
В вопросе отсутствует много информации, например, схемы таблиц как в исходной, так и в целевой базе данных. Начиная с "Identity insert on"
я подозреваю, что в таблицах есть столбец ID, который является IDENTITY и первичным ключом в источнике. Если вас интересуют только новые записи, вы можете написать исходный запрос, который считывает данные только с момента последнего выполнения, например:
SELECT s.ID,.....and other columns
FROM PRODDB.dbo.source_table AS s
where ID>@maxId
Где @maxId
- параметр запроса, предоставленный исходному запросу. Нет необходимости в пакетировании, SSIS может сделать это на основе источника данных, целевых настроек размера пакета и т. Д.
Этот запрос следует использовать только для загрузки новых данных. Для создания начальной копии используйте другой поток данных, исходный запрос которого ничего не фильтрует. Использование что-то вроде Where ID>-1
вернет все данные, но только после сканирования всего индекса. Почему это , когда мы уже собираемся скопировать все данные?
Идентификатор также должен быть первичным ключом в таблице target . Это ускорит операцию select MAX(ID) from target
, которая загружает значение параметра. Это также обнаружит и предотвратит неизбежные ошибки дублирования. Независимо от того, насколько мы осторожны, другие всегда делают ошибки, которые могут привести к дублированию данных.
Вы можете улучшить производительность импорта, отключив индекс перед вставкой и снова включив его после операции импорта.
Это всего лишь один из способов обнаружения изменений и копирования данных. Другой метод - включить Отслеживание изменений в исходной таблице и получить строки, измененные с момента последнего запуска задания.
Вы также можете скопировать измененные данные в промежуточную таблицу и объединить , что с целью изменения INSERT / UPDATE. Идентификатор или отслеживание изменений можно использовать для поиска измененных данных. Это дает преимущество быстрого освобождения источника.