2010-03-22 4 views
2

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

Если я использую Recordsets внутри SSIS для этой цели, есть и другие проблемы. Я понимаю, что компонент «Execute SQL» будет повторно инициализировать Recordset при его запуске, поэтому я не могу использовать это, чтобы добавить дополнительную строку. Есть ли способ создать соединение OLE DB, которое ссылается на набор записей в памяти?

Есть ли лучший способ достичь этого результата?

ответ

2

Существует лучший способ. Я бы предложил использовать временную таблицу, как вы сказали, вы пробовали/рассмотрели. Ключом к использованию временной таблицы с SSIS являются: 1. Вам необходимо установить для свойства «сохранить такое же соединение» значение true в диспетчере подключений, иначе «умное» управление подключением и объединение пулов приведет к отключению вашего соединения (и восстановлению он без таблицы temp) на полпути через ваш пакет. 2. Вам нужно создать свой пакет с созданной уже созданной временной таблицей - даже если вам нужно создать ее как обычную таблицу для того, чтобы ее создать. Когда вы будете готовы к развертыванию, измените имя таблицы в компонентах, которые ее касаются, и установите для этих задач свойство DelayValidation значение False. (Это предотвратит отказ пакета, поскольку таблица не существует, когда пакет изначально запускается.)