Home  /  TOP  /  ABOUT  /  DTS  /  COMMIC  /  DEV  /  ARC  /  KNOWLEDGE  /  EVENTS  /  FORUMS  /  FAQ  /  LINK  /  ENGISH
ループカウンタを利用したループを実装するには
DTS 2000 でループを実装するには,[グローバル変数],[ActiveX スクリプト],[優先順位制約] を組み合わせるのが効果的です。
ここでは,ループ回数をカウントするループカウンタを使った実装を紹介します。

この記事は,
SQL Server 2000
SQL Server Data Taransformation Services|DTS 2000 に基づいて記述しています。

2秒でわかる dts 2000 インデックスに戻る
[グローバル変数] をパッケージに追加する

[パッケージ] で [プロパティ] をクリックして, [DTS パッケージのプロパティ] ダイアログを呼び出す。

[グローバル変数] タブをクリックして,変数の追加画面を表示する。

ループの状態をあらわすカウンター用の変数を準備する。[名前] :LoopCounter ,[型] :[Integer(短整数)],[値]:0 (スクリプトの中で初期化してもよい)

ループの終了を制御するカウンターリミット用の変数を準備する。[名前] :LoopCounterlimit ,[型] :[Integer(短整数)],[値]:任意
(ここでは保守性のために変数化している。スクリプトの中で定数を利用してもよい)

ループの開始ポイントを用意する

ループの基点になる [ActiveX スクリプトタスク] を用意する。

ループの状態を表示する以下のコードを記述する。

サンプルコード
1 :MsgBox "Loop:" & DTSGlobalVariables("LoopCounter").Value & _
2 :    "/" & DTSGlobalVariables("LoopCountLimit").Value ,,"State"
3 :
4 :Main = DTSTaskExecResult_Success

実際の処理を行う

ループ中に行う実際の処理を記述します。
サンプルコードでは単にメッセージを表示しています。
実際のシナリオでは,必要なタスクを組み合わせて処理を記述します。

処理を行うタスクを記述します。

サンプルでは以下のコードによってメッセージを表示しています。

サンプルコード
1 :MsgBox "DoSomething",,"Task"
2 :Main = DTSTaskExecResult_Success


  ヒント 
実際の処理について
実際の処理では,複数のタスクや [DTS 接続] を利用して処理を記述します。
処理を構成するタスクは,ループの基点と終点ではさむように優先順位制約で結びます。

ループの状態を評価する

ループの終点になる [ActiveX スクリプトタスク] を用意する。

ループの状態を表示する以下のコードを記述する。

ループの終了条件が満たされなければ,ループの基点のステータスを実行待ち状態に設定する。

ループの終了条件が満たされた場合は,パッケージの実行を終了する。

サンプルコード
1 :Dim oPkg
2 :Dim oStep
3 :' ループの状態を評価する
4 :If DTSGlobalVariables("LoopCounter").Value < DTSGlobalVariables("LoopCountLimit").Value Then
5 :    ' パッケージの参照を取得する
6 :    Set oPkg = DTSGlobalVariables.Parent
7 :
8 :    ' ループの基点タスクの参照を取得する
9 :    Set oStep = oPkg.Steps("DTSStep_DTSActiveScriptTask_1")
10:
11:    ' 基点タスクを実行待ちに書き換える
12:    oStep.ExecutionStatus = DTSStepExecStat_Waiting
13:
14:    ' 開放処理
15:    Set oStep = Nothing
16:    Set oPkg = Nothing
17:End If
18:
19:' カウンタをインクリメントする
20:
21:DTSGlobalVariables("LoopCounter").Value = DTSGlobalVariables("LoopCounter").Value + 1
22:
23:Main = DTSTaskExecResult_Success


  ヒント 
実行後の [グローバル変数] の値について
パッケージの実行を行うと,[グローバル変数] の値が書き換えられます。
実行が完了した時点では,変数の値はループ処理によってインクリメントされたままの状態になっています。
パッケージを連続実行するような場合は,カウンタに使う変数を初期化するタスクを記述したほうがよいでしょう