2016-02-05 3 views
1

У нас есть бизнес-процесс для нашего BI приборной панели сводного отчета, как показано ниже:SQL последовательность выполнения в транзакции

  1. SAP записывает данные транзакций в базу данных SQL Server
  2. SAP инициирует работу в SQL Server для заполнения сводные данные, основанные на данных о транзакции

SAP делает это в транзакции

BEGIN TRAN 
    Prepare INSERT statements to STOCK_SALES_VARIANT (2000 records) 
    Prepare INSERT statements to STOCK_SALES_BUYER (16000 records) 
    CALL JOB "Batch Insert" 
    CALL JOB "Populate Summary" 
COMMIT 

Мы обнаружили, что задание «Заполнение резюме» было вызвано до завершения ввода данных STOCK_SALES_BUYER. Это приводит к неточным итоговым данным.

Я добавил столбец со значением по умолчанию getdate(), чтобы зафиксировать время на вставке.

Вот лог:

Variant table - 2016-02-05 10:41:08.547 to 2016-02-05 10:41:09.817 
Buyer table - 2016-02-05 10:41:11.477  2016-02-05 10:41:15.480 
Job - 2016-02-05 10:41:12 to 2016-02-05 10:41:21 

Я вижу работу начала до последней прочитанной записи в таблице покупателя.

Может ли кто-нибудь посоветовать, как решить эту проблему с синхронизацией и объяснить, как несколько операторов выполняются последовательно за сценой? Спасибо!

+0

похоже, что он должен выполняться последовательно. что делать, если вы это сделаете: begin tran> insert ....> insert ....> commit tran> begin tran> call job> commit tran – FLICKER

ответ

0

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

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