2013-05-16 5 views
1

Мне нужно перенести записи из таблицы в Oracle в SQL Server 2008 R2. Я уже разработал решение, которое позволяет мне перемещать данные и сохранять копию перенесенных идентификаторов в таблицу сцен.
Благодаря компоненту Lookup и таблице этапов я могу обеспечить, чтобы избежать дубликатов, поскольку миграция выполняется в несколько разных моментов, а перенесенные объекты не соответствуют определенному порядку последовательности.Предварительные записи SSIS перед извлечением

Ниже моей SSIS схеме:

enter image description here

Я использую выражение и две переменные для сбора данных из Oracle в слотах:

SELECT * 
FROM ORDERS 
WHERE OrderID > [@User::Start] AND OrderID <= [@User::End] 
AND STATUS <> 'Open' 

Когда все заказы, которые не statsu " Open "были перенесены, мы перенесем оставшуюся дельту. Для этого мне нужно найти данные, перенесенные на сцену. Таким образом, запрос для источника данных будет:

SELECT * 
FROM ORDERS 
WHERE OrderID NOT IN ([@User::AlreadyMigratedIDs]) 

Моя потребность будет иметь возможность хранить в переменной «AlreadyMigratedIDs» все идентификаторы, присутствующие в таблицу Stage.

Как можно использовать информацию в таблице сцен (на SQL Server) в качестве условия для запроса, используемого в компоненте ADO.net, для сбора исходных данных из Oracle? Могу ли я использовать любой другой SSIS, например, поиск до объекта ADO.net?

+1

Вы должны предоставить запрос и дизайн упаковки для того, чтобы объясните свой сценарий.AFAIK. Вы можете использовать 'Execute SQL Task' для хранения условия, например, получить все« ID »из« SQL Server »и сохранить в переменной. Затем создайте выражение sql с указанной выше переменной (' Select col .. из таблицы, где ID = @ variable') d использовать его в 'ADO.NET source' – praveen

+0

@paveen: я добавил запрос, используемый для сбора данных. Мне нравится идея хранения идентификаторов в переменной и инициализация с помощью задачи SQL. Не могли бы вы привести пример? Какому типу данных должна быть переменная (всего около 160 тыс. Записей)? – Francesco

+0

Откуда вы получаете значения для переменных 'User :: Start' и' User :: End'? – praveen

ответ

1

Использование Execute SQL Task до вашего потока данных для хранения значений пользователя :: Start и End User :: из промежуточной таблицы SQL сервера

Name  Data Type 
StartID int 
EndID  int 

Используйте ResultSet, как Single Row

Для образца I принял запрос от Adventure Works 2008 R2

Select max([BusinessEntityID]) as StartID 
     ,max([DepartmentID]) as EndID 
FROM [AdventureWorks2008R2].[HumanResources].[EmployeeDepartmentHistory] 

изменить приведенную выше запрос в соответствии с вашими потребностями, чтобы получить значения ID из таблицы перевалочных

В результирующем совпадают результаты с переменными, созданных

enter image description here

Теперь использовать 2 переменные в оракула запросе

SELECT * 
FROM ORDERS 
WHERE OrderID > [@User::StartID] AND OrderID <= [@User::EndID] 
AND STATUS <> 'Open' 
+0

Спасибо за предложение. Я редактировал свой вопрос, представляя запрос, который я ищу. Моя потребность состояла бы в том, чтобы все уже перенесенные идентификаторы в переменную.В тот день, когда мы перенесем оставшиеся дельта-записи, нам больше не понадобятся стартовые/конечные переменные, так как нам просто нужно переместить все данные, которые еще не были перенесены. – Francesco

+0

Как хранятся идентификаторы в переменной? – praveen

+0

Это то, что я прошу. Во время миграции я заполняю таблицу Stage идентификаторами заказов. Мне понравилось ваше предложение, так как если бы я мог инициализировать переменную в SQL Task, например, со всеми идентификаторами, содержащимися в STage Table, то я мог бы использовать ее, как указано в моем втором запросе. Мне интересно, что это лучший способ добиться этого. – Francesco

Смежные вопросы