2016-04-04 8 views

答えて

1

は、SQLエージェントジョブを持っているSSISパッケージごとに15分を実行します。

0

私はすべての時間のMERGEは、SQLでテーブルを同期する権利選択肢であることを知っています。しかし私はそれがリンクされたサーバーでも使用できるかどうかはわかりません。とにかく、いくつかの研究の後、私はこの作業をマージ結合を使って達成しました。 Mergeは必要なものを更新、挿入、削除します。しかし、ジョブが実行されると、15分ごとにテーブルを更新するのに少し時間がかかります。したがって、最後の作業から実行されたトランザクションを挿入する#Temableを作成できます。そのソーステーブルにdatetimeスタンプを使用して、最後に実行したジョブ(15分)から実行されたトランザクションを取得できます。ソース表に日付時刻がない場合は、そのソース表の監査表を使用できます(該当する場合)。

(JLTテーブルには3列(last_job_end)(cur_job_start)(一部のジョブID)があります)JLTは、最後のジョブ終了とジョブ開始時間を取得するためにリンクサーバーで作成する必要があるジョブログテーブルです。最後のジョブは、ジョブ内のクエリの最後に毎回終了更新する。同様にジョブの開始でCURジョブ開始)

SELECT * 
INTO #TEMPtable 
FROM OPENQUERY([DB2], 'Select * from source_table 
         where some_id_column in 
          (select some_id_column 
          from audit_table AT, Job_log_table JLT 
          where datetime > last_job_end 
           and datetime <= cur_job_start 
           and c_job = ''some_job_id'')’)` 

あなたは、監査テーブルを持っていない、あなたはソースの日時をお持ちの場合。

SELECT * 
INTO #TEMPtable 
FROM OPENQUERY([DB2], 'Select * 
         from source_table s, JOB_CYCLE_TABLE pr 
         where s.DATETIME <= pr.cur_job_start 
         and s.DATETIME > pr.last_job_end 
         and pr.c_job = ''some_job_id''') 
関連する問題