6

SQLJOBを作成する必要があります。

ステップ1 : TaskToProcessテーブルに行を挿入し、ProcessID(PK and Identity)を返します

ステップ2: ステップ1で生成されたProcessIDを取得し、その値をSSISパッケージに渡して、SSISパッケージを実行します。

これはSQLサーバーのJOBで可能ですか?

これで私を助けてください

前もって感謝します。

4

2 に答える 2

3

ジョブステップ間で変数値を渡す組み込みの方法はありません。ただし、いくつかの回避策があります。

1つのオプションは、ステップ1の最後に値をテーブルに格納し、ステップ2でデータベースからクエリを返すことです。

ProcessIDテーブルに挿入し、挿入された行のを返すことによって生成しているように聞こえますSCOPE_IDENTITY()。ジョブステップ1がこのテーブルに挿入する唯一のプロセスである場合、IDENT_CURRENT('<tablename>')関数を使用してジョブ2から最後に挿入された値を取得できます。

編集

複数のプロセスがプロセス制御テーブルに挿入される可能性がある場合、最善の解決策は、おそらくステップ1と2を単一のステップにリファクタリングすることです-おそらく、ステップ間で変数を渡すことができる制御SSISマスターパッケージ(または他の同等のテクノロジー)を使用します。

于 2011-05-21T09:28:00.903 に答える
1

Ed Harperの回答に似ていますが、 「ジョブステップの変数」MSDNフォーラムスレッドにいくつかの詳細があります。

ジョブ環境では、Process-Keyed Tables(job_idを使用)またはGlobalTemporaryTablesのいくつかのフレーバーが最も役立つようです。もちろん、「グローバルに」利用できるものを残したくない場合があることを私は理解しています。必要に応じて、保存する値を暗号化または難読化することも検討できます。使用した行は必ず削除してください。

プロセスキーテーブルについては、 「ストアドプロシージャ間でデータを共有する方法」の記事で説明されています。

SQLサーバーエージェントのジョブ/ジョブステップにパラメーターを送信するMSDNフォーラムスレッドの別の提案では、次のようなパラメーターを保持するテーブルを作成します。

CREATE TABLE SQLAgentJobParms
(job_id uniqueidentifier,
 execution_instance int,
 parameter_name nvarchar(100),
 parameter_value nvarchar(100),
 used_datetime datetime NULL); 

呼び出し元のストアード・プロシージャーは、渡されたパラメーターを受け取り、それらをSQLAgentJobParmsに挿入します。その後、EXECsp_start_jobを使用できます。また、すでに述べたように、ジョブステップはSQLAgentJobParmsから選択して、必要な値を取得します。

于 2016-11-23T10:18:39.640 に答える