1 つのオプションは、この機能を実現するために、SQL 実行タスクと組み合わせて優先順位制約を利用することです。でこれを実現する方法の例を次に示しSSIS 2008 R2
ます。
質問で提供された情報に基づいて簡単な表を作成しました。
テーブル スクリプトを作成します。
CREATE TABLE dbo.AR_Sale(
Id int NOT NULL IDENTITY PRIMARY KEY,
Item varchar(30) NOT NULL,
Price numeric(10, 2) NOT NULL,
Processed bit NOT NULL
)
GO
次に、新しいテーブルにいくつかのサンプル データを入力しました。行の 1 つで、Processed フラグがゼロに設定されていることがわかります。
テーブル スクリプトにデータを入力します。
INSERT INTO dbo.AR_Sale (Item, Price, Processed) VALUES
('Item 1', 23.84, 1),
('Item 2', 72.19, 0),
('Item 3', 45.73, 1);
SSIS パッケージで、次の 2 つの変数を作成します。
Processed
データ型のInt32
SQLFetchCount
String
値がに設定されたデータ型のSELECT COUNT(Id) ProcessedCount FROM dbo.AR_Sale WHERE Processed = 0
SSIS プロジェクトで、選択したデータベースを指す OLE DB データ ソースを作成します。データ ソースをパッケージの接続マネージャーに追加します。この例では、データ ソースの名前を として使用しましたPractice
。
パッケージのControl Flow
タブで、ツールボックスから [SQL 実行タスク] をドラッグ アンド ドロップします。
以下に示すように、SQL 実行タスクの [全般] ページを構成します。
- 適切な名前を付けて、言う
Check pre-execution
- クエリがスカラー値を返すため、ResultSetを に変更します
Single row
- この例では、接続を OLE DB データソースに設定します。
Practice
- 変数に格納されたクエリを使用するため、 SQLSourceTypeを に設定します。
Variable
- SourceVariableを_
User::SQLFetchCount
Result Set
左のセクションのページをクリックします
以下に示すように、SQL 実行タスクの結果セットページを構成します。
- [追加] ボタンをクリックして、クエリによって返されたカウント値を格納する新しい変数を追加します。
- 結果名を変更して
0
、クエリによって返される最初の列の値を示します。
- 変数名を
User::Processed
- クリック
OK
パッケージのControl Flow
タブで、ツールボックスからメール送信タスクとデータ フロー タスクをドラッグ アンド ドロップします。[制御フロー] タブは次のようになります。
SQL 実行タスクとメール送信タスクを結合する緑色の矢印を右クリックします。Edit... をクリックします。緑色の矢印は Precedence Constraint と呼ばれます。
Precedence Constraint Editor で、次の手順を実行します。
- 評価操作を
Expression
- 式を に設定し
@[User::Processed] == 0
ます。これは、変数 Processed がゼロに設定されている場合にのみ、このパスを取ることを意味します。
- [OK] をクリックします。
SQL 実行タスクとデータ フロー タスクを結合する緑色の矢印を右クリックします。Edit... をクリックします。 Precedence Constraint Editor で、次の手順を実行します。
- 評価操作を
Expression
- 式を に設定し
@[User::Processed] != 0
ます。これは、変数 Processed がゼロに設定されていない場合にのみ、このパスを取ることを意味します。
- [OK] をクリックします。
制御フロー タブは次のようになります。必要に応じて、メール送信タスクを構成して電子メールを送信し、データ フロー タスクを構成してデータを更新できます。
populate table スクリプトに基づいてデータ セットを使用してパッケージを実行すると、処理されていない行が 1 行あるため、パッケージはデータ フロー タスクを実行します。
スクリプトを使用してテーブル内のすべての行で Processed フラグを 1 に設定した後にUPDATE dbo.AR_Sale SET Processed = 1
パッケージを実行すると、パッケージはメール送信タスクを実行します。
それが役立つことを願っています。