Как сравнить количество строк в двух таблицах, если подсчитано совпадений, чем нормально, если не совпадает, это перезапустит пакет служб SSIS - PullRequest
0 голосов
/ 27 августа 2018

Я сделал пакет ssis, в котором я сделал поток данных для дополнительных данных. IP-адреса исходного и конечного серверов различны. Ниже вы можете найти блок-схему моего пакета Схема управления Диаграмма потока данных пакет работает нормально. В задаче «Выполнение SQl»: - управляет таблицей журналов и запускает добавочную задачу. запрос, который я использовал: -

insert into audit_log (
Packagename,
process_date,
start_datetime,
end_datetime,
Record_processed,
status
)values('CRM-TO-TRANSORGDB',null,GETDATE(),null,null,null);

select MAX(ID) as ID,MAX(process_date) as proc_date  from audit_log where Packagename ='CRM-TO-TRANSORGDB' ; 

сохранить идентификатор и proc_date в переменной.

в задаче Execute SQl 1: - просто обновить таблицу журнала.

UPDATE audit_log
SET
process_date=?,
end_datetime = GETDATE(),
status='SUCCESS'
record_processed=?
WHERE (packagename = 'CRM-TO-TRANSORGDB') AND ID=? ;

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

В потоке данных просто извлеките все записи и поместите их в таблицу назначения. это все, что я сделал.
Но мой вопрос: 1) Как сравнить итого нет. количество строк из исходной таблицы в таблицу назначения в пакете ssis. 2) если он не совпадает, он автоматически перезапустит мою задачу.

@ Томас, согласно вашей инструкции, я сделал следующее: 1) Я сделал задачу «Выполнить SQl» для источника и места назначения. 2) и добавьте задачу «Выполнение пакета» и добавили условие для несоответствия счетчику.

add the execute SQL Task for the source and destination

и добавил выражение для проверки row_count_src! = Row_count_dest

и в Source_table_count я использовал следующий запрос:

select count(SubOrderID) as row_count_src from fact_suborder_journey 
WHERE Suborderdate between '2016-06-01' and GETDATE()-1 ;

в dest_table_count я использовал следующий запрос:

select count(SubOrderID) as row_count_dest from fact_suborder_journey 
WHERE Suborderdate between '2016-06-01' and GETDATE()-1 ;

Я добавил две переменные как int64 в этом пакете ssis. и карту в наборе результатов ниже вы можете найти рис, что я сделал. variable assignments Result_set

но После всего этого я получаю эту ошибку: [Выполнение задачи SQL] Ошибка: произошла ошибка при назначении значения переменной "row_count_src": "Тип значения, назначаемого переменной" User :: row_count_src ", отличается от текущего типа переменной. Переменные могут не изменить тип во время выполнения Типы переменных являются строгими, за исключением переменных типа Object. ».

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Если я правильно понимаю ваш вызов ...

  1. В задаче потока данных используйте преобразование RowCount между источниками. и пункт назначения, чтобы захватить строки, записанные в пункт назначения. это будет храниться в переменной.

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

  3. Создайте задачи пакета выполнения, которые выполняют этот же пакет, и наложите ограничение приоритета ранее, если это сравнивается, если переменная из переменной Step1 <> в Step2.

0 голосов
/ 27 августа 2018

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

Что я наделал?

  1. Сначала у меня есть задача DataFlow, которая перемещает данные из источника в назначения.

  2. Тогда у меня есть задача «Выполнение SQL», которая в основном подсчитывает все строки из TableA и отображает его на переменную count1, например. Исходная таблица

  3. Тогда у меня есть задача «Выполнение SQL», которая в основном подсчитывает все строки из TableB и отображает его на переменную count2, например. Таблица назначения

  4. Затем я создаю задачу «Выполнение пакета», где я тоже на нее ссылаюсь самостоятельно. Затем я делаю ограничение приоритета с выражением, говорящим Count1! = Count2.

Потому что, если они отличаются, вы хотите перезапустить задачу. Если они равны последней задаче Задача «Выполнение пакета» никогда не будет выполнена.

Надеюсь, что-то подобное?

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...