- - PR -
SQL Server 2000 DTS でのストアドプロシージャ実行について
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-26 18:34
DTSからのストアドプロシージャ実行について2点質問させて頂きます。
不勉強のため既知の内容もあるかと思いますが、何卒よろしくお願い致します。 ホストからSQLServer2000へのデータ転送を固定長ファイルを介して 行おうとしております。 大まかな処理手順は以下のようになります。 1.ホストから固定長ファイルデータを出力。SQLServer2000が稼動するマシンへFTP転送。 2.SQLServer2000のDTS、「一括挿入」タスクでテンポラリテーブルへデータロード。 3.テンポラリテーブル上のデータの妥当性チェックを行う。 4.妥当性チェックが完了したデータをSQLServer2000上の正規のテーブルへ転送。 上記手順の内、3と4の処理をそれぞれストアドパッケージを用いて作成することを考えております。 また、それぞれのストアドパッケージは処理結果についてOUTパラメータを用いて幾つかの整数値リターンコードを返し、それをDTS側で取得し、次ステップへの振り分けの判断を行いたいと考えております。 DTS側でストアドパッケージからの戻り値を取得し、処理の振り分けを行う方法として2つ考えましたが、それぞれ以下の状況で思うように動作してくれませんでした。 (1).「ActiveXタスク(VBScript)」からストアドパッケージをADO経由で実行し、戻り値を取得する。 ⇒VBScriptからADOのexecuteメソッドを使用してOUTパラメータ付きのストアドパッケージを呼び出し、OUTパラメータ内の戻り値を取得しようとしたのですが、うまくいきませんでした。他のメソッドも調べてみたのですが、適当なものが見つかりませんでした。 (2).DTSの「SQL実行タスク」からストアドパッケージを呼び出し、同タスクの「出力パラメータ(グローバル変数)」に戻り値を設定、ワークフロープロパティのActiveXスクリプト上でグローバル変数を取得し、判断の振り分けを行う。 ⇒出力パラメータにはレコードセットしか指定できないため、コード値のようなスカラー値には利用できないようでした。 (1)については、VBであれば取得できるようですが、VBScriptには適当なメソッドが用意されていないようでした。 ご教授願いたいのは、 @DTS上でストアドパッケージを実行し、その戻り値(スカラー値)を取得する方法はあるでしょうか。 A戻り値を取得できたとして、ActiveXなどでその戻り値を判定し、次のタスクを実行する方法はあるでしょうか。DTS上で定義されている定数としてDTSTaskExecResult_Success、DTSTaskExecResult_Failureの2つでフローを振り分ける方法はあるのですが、ユーザ定義したコード値で判定し、次のタスクを実行したいと思っております。 不明な点がございましたら返信頂ければと思います。 長文になってしまいましたが、何卒ご教授のほど、よろしくお願い致します。 | ||||||||||||||||
|
投稿日時: 2005-11-29 13:31
こんにちは。
「ストアドパッケージ」ってストアドプロシージャのことですよね?そう仮定して話を進めます。 SQL実行タスクのSQLステートメントに exec ? = ストアド名 って書いてあげて「パラメータ」ボタンを押すとパラメータマッピング画面が出てきます。で、「出力パラメータ」のタブを選んで、適当なグローバル変数にマッピングしてください。
次のタスクを右クリックして、ワークフロー⇒ワークフローのプロパティをポイントします。ワークフローのプロパティ画面の「オプション」タブを選んで「ActiveXスクリプトを使用」にチェックを入れて「プロパティ」ボタンをクリックすると、ActiveXスクリプトプロパティ画面が出てきます。そこで分岐の判定をします。
こんなかんじです。「月次実行FLG」ってのはグローバル変数です。 ご参考になればよいのですが。 | ||||||||||||||||
|
投稿日時: 2005-11-30 00:49
かめたろ さん
返信が遅くなってすみません。回答有難うございました。 以下コメントいたします。 >「ストアドパッケージ」ってストアドプロシージャのことですよね?そう仮定して話を>進めます。 ご指摘の通りです。失礼致しました。 >SQL実行タスクのSQLステートメントに > exec ? = ストアド名 >って書いてあげて「パラメータ」ボタンを押すと テストで下記のようなプロシージャを登録し、上記の通りSQL実行タスクに設定してみたのですが、「パラメータの位置が違います」というエラーが出てきてしまいます。 どこか認識の違いはありますでしょうか。 CREATE PROCEDURE TEST01 @retCOde NUMERIC(10) OUTPUT AS BEGIN Set @retCode = 1 END GO >パラメータマッピング画面が出てきます。で、「出力パラメータ」のタブを選んで、適>当なグローバル変数にマッピングしてください。 上記の「出力パラメータ」ですが、設定画面を見る限り「行の値」もしくは「行セット」がラジオボタンメニューにあるように、レコード形式のデータしか設定できないようですが間違ってますでしょうか。 今回は戻り値を整数値として取得したいと思っています。 Aについて、 >次のタスクを右クリックして、ワークフロー⇒ワークフローのプロパティをポイントし>ます。ワークフローのプロパティ画面の「オプション」タブを選んで「ActiveXスクリ>プトを使用」にチェックを入れて「プロパティ」ボタンをクリックすると、ActiveXス>クリプトプロパティ画面が出てきます。そこで分岐の判定をします。 了解しました。前のタスクから次のタスクを選んで実行するのではなく、次のタスクの側で変数によって判別するということですね。これでやりたい事を満たすことができます。 有難うございました。 お手数かと思いますが、@について再度ご回答頂けると有難いです。 よろしくお願い致します。 | ||||||||||||||||
|
投稿日時: 2005-11-30 13:29
こんにちは。
ありゃ?ホントですね。スミマセン、前回の投稿は動作確認をしていませんでした。 下の件と合わせて代替案を考えてみました。
間違っていません。 今度は、ちゃんと動作確認をしてます。 @ストアド(DTSで「行の値」を取得するため、結果セットを戻すようにしてます)
ASQL実行タスク(パラメタを受け取る場合は「?」はいらないっぽいですね)
B出力パラメタのマッピング 「行の値」を選択し、適当なグローバル変数に割り当てる これでどうでしょう。 また、グローバル変数への値の設定は「動的プロパティタスク」でクエリを使って行うこともできるようです。 工夫すればいろいろできそうですねー | ||||||||||||||||
|
投稿日時: 2005-12-03 17:02
かめたろさん
コメントが遅れてしまい、すみませんでした。
@〜Bの方法で、取得することができました! ありがとうございました。。
初めてDTSを使用したのですが、奥が深いですね。。 DTSを知っている方は貴重なので、また色々ご教授下さい。。 |
1