トリガーからMS SQL Server 2000 DTSパッケージを実行する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/252069

  •  05-07-2019
  •  | 
  •  

質問

私は周りを見回して、これを行う方法についていくつかのアイデアを見つけましたが、決定的な最良の方法はありませんでした。アイデアの1つは、sp_start_jobを使用して、DTSパッケージを実行するSQL Serverエージェントジョブを開始することでした。これが最善の方法である場合、次の質問は、「ジョブからDTSパッケージをスケジュールし、繰り返しないようにする方法」

です。

ありがとう、 ティム

役に立ちましたか?

解決

xp_cmdshell を使用すると、dtsrunを実行できます。

他のヒント

この種の機能をトリガーに結び付けることはお勧めしません。トリガーは高速になるはずです。 I がトリガーするのと同じくらい高速になるDTSパッケージを起動する方法はないと思います。これがあなたに共鳴する場合、トリガーに特別なテーブルに行を挿入し、このテーブルを監視する目的に必要な頻度でジョブを実行することをお勧めします(毎分?10秒ごと?)必要に応じて適切なDTSパッケージを開始します。

xp_cmdshellを使用する代わりに、これを行いました:

テーブル内の特定の値が変更されると、トリガーはmsdb.sp_start_jobを使用してジョブを開始します。このジョブは、ユーザーが開始した場合にのみ、スケジュールどおりに実行しないでください。ジョブスケジュールを1回実行するように設定しましたが、これは過去のものであり、有効なボックスのチェックを外しました。

このジョブには、DTSRun /〜Z0xHEXENCRYPTEDVALUEという1つのステップがあります。 DTSパッケージは、このサーバーから別のプラットフォーム上の別のサーバーにいくつかの行をコピーし、成功すると、次回のトリガーでテーブルの値をリセットします。トリガーは、sp_start_jobを呼び出す前にテーブル値をチェックするため、毎回ではなく特定の条件下でのみジョブが開始されます。

sp_start_jobは非同期に実行されるため、トリガーはすぐに完了します。これの唯一の欠点は、成功時にリセットされた値をポーリングし、それが機能したことをユーザーに知らせるか、タイムアウト期間後に機能しなかったことを知らせる必要があることです。

代替手段は、同期操作が必要な場合はxp_cmdshellを使用することです。これは、トリガーの内部からは良い考えではないかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top