最初のタスクがストアドプロシージャを実行して、実行日が休日ではないことを確認するSSISパッケージがあります。休日の場合は、カウントが1のレコードセットを返します。
レコード数が1の場合はSSISを停止できるようにしたいのですが、レコード数がゼロの場合は実行を継続します。これを実装するための最良の方法がわかりません。パッケージに追加する必要がある制御フロー項目は何ですか?
私はSSISに比較的慣れていないので、どのアイテムを追加すればよいかわかりません。どんな助けでも素晴らしいでしょう。
最初のタスクがストアドプロシージャを実行して、実行日が休日ではないことを確認するSSISパッケージがあります。休日の場合は、カウントが1のレコードセットを返します。
レコード数が1の場合はSSISを停止できるようにしたいのですが、レコード数がゼロの場合は実行を継続します。これを実装するための最良の方法がわかりません。パッケージに追加する必要がある制御フロー項目は何ですか?
私はSSISに比較的慣れていないので、どのアイテムを追加すればよいかわかりません。どんな助けでも素晴らしいでしょう。
これを実現するためのアイデアを提供できるオプションを次に示します。この例では、休日のリストを含むテーブルと照合して、今日の日付が休日かどうかを確認します。パッケージ タスクの残りの部分は、今日の日付が休日でない場合にのみ実行されます。この例ではSSIS 2008 R2
、SQL Server 2008 R2
データベースを使用しています。
段階的なプロセス:
「 SQL スクリプト」セクションにあるスクリプトを使用して、名前付きのテーブルと名前付きdbo.Holidays
のストアド プロシージャを作成します。スクリーンショット # 1に示すように、テーブルにデータを入力します。dbo.CheckTodayIsHoliday
SSIS パッケージで、RecordCount
とという名前の 2 つの変数を作成しますSQLProcedure
。スクリーンショット # 2に示すように、値を入力します。また、SQL Server データベースに接続するための OLE DB 接続を作成します。この例では、 SQLServerと名付けました。スクリーンショット # 3を参照してください。この例では、通常の接続の代わりにデータ ソースを使用しています。そのため、スクリーン ショットではアイコンが異なります。
SSIS パッケージでData Flow task
、データ フロー タスク内に and を配置しOLE DB source
ますRow count transformation
。スクリーンショット # 4を参照してください。
OLE DB Source
スクリーンショット # 5と # 6に示すように構成します。これにより、ストアド プロシージャが実行され、結果がフェッチされます。
Row count transformation
スクリーンショット # 7に示すように構成します。
では、スクリーンショット # 8Control Flow
に示すように、さらにいくつかのダミー タスクを配置しました。
スクリーンショット # 9に示すように、データ フロー タスクと次のタスク (シーケンス コンテナー) の間のコネクタを右クリックします。
Precedence Constraint Editor
スクリーンショット # 10に示すように構成します。
スクリーンショット11June 16, 2011
は、今日の日付 ( ) がdbo.Holidays
テーブルに休日としてマークされているパッケージの実行を示しています。もちろん、2011 年 6 月 16 日は、休暇を取らない限り、私が働いている休日ではありません。
スクリーンショット # 12に示すように、テーブル データを変更します。
スクリーンショット # 13は、今日の日付 ( June 16, 2011
)がテーブルに存在しないdbo.Holidays
パッケージの実行を示しています。
それが役立つことを願っています。
SQL スクリプト:
CREATE TABLE [dbo].[Holidays](
[Id] [int] IDENTITY(1,1) NOT NULL,
[HolidayDate] [datetime] NULL,
CONSTRAINT [PK_Holidays] PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY]
GO
CREATE PROCEDURE [dbo].[CheckTodayIsHoliday]
AS
BEGIN
SET NOCOUNT ON
SELECT HolidayDate
FROM dbo.Holidays
WHERE DATEDIFF(DAY, HolidayDate, GETDATE()) = 0
END
GO
スクリーンショット #1:
スクリーンショット #2:
スクリーンショット #3:
スクリーンショット #4:
スクリーンショット #5:
スクリーンショット #6:
スクリーンショット #7:
スクリーンショット #8:
スクリーンショット #9:
スクリーンショット #10:
スクリーンショット #11:
スクリーンショット #12:
スクリーンショット #13:
1 つの方法は、変数 @Holiday の値を設定するために使用する Execute SQl タスクを作成することです。次に、その Execute SQl タスクから出てくる成功フロー ラインを、緑色のライン自体を右クリックし、[編集] をクリックして、成功と制約の両方に変更します。評価操作として [式と制約] を選択し、式に次のような式を追加します。
@Holiday == 0