MVC アプリケーションから SSIS パッケージを開始および監視するために使用するフレームワークを作成しています。私はそれのほとんどを機能させています。私は、パッケージの表現をブラウザーに表示できるように、モニター機能を改善しようとしているところです。パッケージのすべての「ソース」コンポーネントを一意に識別できるクエリを作成できましたが、これは単純な表現にすぎず、たとえば、シーケンスとそれに関連するステップを識別できません。
私ができるようにしたいのは、次のような表現を提供する SSIS ログ テーブルの階層クエリを作成することです。
Package Start
Step 1
Sequence A
Step A1
Step A2
Sequence B
Step B1
Step B2
Step 2
Sequence C
Step C1
Step C2
Step C3
Step 4
Step 5
Package End
階層を作成できるようにすることで、ブラウザでパッケージの表現を作成できるようになりたいと考えています。現在とは異なり、構造のようなフラットなテーブルでしか表示できないため、シーケンスステップを内部に配置できるはずですプロセスがどこにあるかについて、より良いフィードバックをユーザーに提供します。
パッケージの定義に使用するログ エントリの例 (以前に実行したインスタンスのエントリを使用して定義を取得します) は、次のようになります。
id event computer operator source sourceid executionid starttime endtime datacode databytes message
2478 PackageStart {MACHINE} {USER} Package 3BC68A08-3B6E-4138-BC79-4B124A37FF60 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:56:58.000 2013-06-18 17:56:58.000 0 0x Beginning of package execution.
2479 OnPreExecute {MACHINE} {USER} Package 3BC68A08-3B6E-4138-BC79-4B124A37FF60 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:56:58.000 2013-06-18 17:56:58.000 0 0x
2480 OnPreExecute {MACHINE} {USER} Receive Orders 96FEEE13-2053-4B6F-9EF6-13F063CBED0B 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:56:59.000 2013-06-18 17:56:59.000 0 0x
2481 OnProgress {MACHINE} {USER} Receive Orders 96FEEE13-2053-4B6F-9EF6-13F063CBED0B 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:06.000 2013-06-18 17:57:06.000 100 0x Executing query "DECLARE @RowCount INT SET @RowCount = 0 WHILE @Ro...".
2482 OnPostExecute {MACHINE} {USER} Receive Orders 96FEEE13-2053-4B6F-9EF6-13F063CBED0B 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:06.000 2013-06-18 17:57:06.000 0 0x
2483 OnPreExecute {MACHINE} {USER} Update Status to Processing 4EE144BF-CA76-4BA5-B0B2-77E0899A22C0 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:06.000 2013-06-18 17:57:06.000 0 0x
2484 OnProgress {MACHINE} {USER} Update Status to Processing 4EE144BF-CA76-4BA5-B0B2-77E0899A22C0 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:06.000 2013-06-18 17:57:06.000 100 0x Executing query "UPDATE [dbo].[Order] SET [Status] = 2 WHERE ...".
2485 OnPostExecute {MACHINE} {USER} Update Status to Processing 4EE144BF-CA76-4BA5-B0B2-77E0899A22C0 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:06.000 2013-06-18 17:57:06.000 0 0x
2486 OnPreExecute {MACHINE} {USER} Clear dates before processing orders BE85B6A1-07D0-41E6-B76D-9554348867A9 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:06.000 2013-06-18 17:57:06.000 0 0x
2487 OnProgress {MACHINE} {USER} Clear dates before processing orders BE85B6A1-07D0-41E6-B76D-9554348867A9 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:10.000 2013-06-18 17:57:10.000 100 0x Executing query "UPDATE [dbo].[Order] SET [ProcessedDate] = NU...".
2488 OnPostExecute {MACHINE} {USER} Clear dates before processing orders BE85B6A1-07D0-41E6-B76D-9554348867A9 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:10.000 2013-06-18 17:57:10.000 0 0x
2489 OnPreExecute {MACHINE} {USER} Process Sequencer 4535503D-3DED-4D12-BE07-431A285A29F3 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:10.000 2013-06-18 17:57:10.000 0 0x
2490 OnPreExecute {MACHINE} {USER} Set Processed Date C027DF69-3006-4BB7-8F04-CD04DACF6910 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:10.000 2013-06-18 17:57:10.000 0 0x
2491 OnProgress {MACHINE} {USER} Set Processed Date C027DF69-3006-4BB7-8F04-CD04DACF6910 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:15.000 2013-06-18 17:57:15.000 100 0x Executing query "UPDATE [dbo].[Order] SET [ProcessedDate] = GET...".
2492 OnPostExecute {MACHINE} {USER} Set Processed Date C027DF69-3006-4BB7-8F04-CD04DACF6910 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:15.000 2013-06-18 17:57:15.000 0 0x
2493 OnPreExecute {MACHINE} {USER} Create Pick List 680E0119-20A1-43A7-87F9-F4A0ECB292D0 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:15.000 2013-06-18 17:57:15.000 0 0x
2494 OnProgress {MACHINE} {USER} Create Pick List 680E0119-20A1-43A7-87F9-F4A0ECB292D0 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:28.000 2013-06-18 17:57:28.000 100 0x Executing query "INSERT [dbo].[PickList] ([OrderID] ,[Picke...".
2495 OnPostExecute {MACHINE} {USER} Create Pick List 680E0119-20A1-43A7-87F9-F4A0ECB292D0 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:28.000 2013-06-18 17:57:28.000 0 0x
2496 OnPostExecute {MACHINE} {USER} Process Sequencer 4535503D-3DED-4D12-BE07-431A285A29F3 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:28.000 2013-06-18 17:57:28.000 0 0x
2497 OnPreExecute {MACHINE} {USER} Update Shipping Date 2C9E46A4-FDCE-425B-AC46-666B783CFD44 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:28.000 2013-06-18 17:57:28.000 0 0x
2498 OnProgress {MACHINE} {USER} Update Shipping Date 2C9E46A4-FDCE-425B-AC46-666B783CFD44 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:32.000 2013-06-18 17:57:32.000 100 0x Executing query "UPDATE [dbo].[Order] SET [ShippedDate] = GETUT...".
2499 OnPostExecute {MACHINE} {USER} Update Shipping Date 2C9E46A4-FDCE-425B-AC46-666B783CFD44 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:32.000 2013-06-18 17:57:32.000 0 0x
2500 OnPostExecute {MACHINE} {USER} Package 3BC68A08-3B6E-4138-BC79-4B124A37FF60 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:32.000 2013-06-18 17:57:32.000 0 0x
2501 PackageEnd {MACHINE} {USER} Package 3BC68A08-3B6E-4138-BC79-4B124A37FF60 086AEB95-717E-4EED-850F-A403BF4D4B0D 2013-06-18 17:57:32.000 2013-06-18 17:57:32.000 0 0x End of package execution.
テーブル内のフィールドの親子関係を持つクエリを以前に作成しましたが、このためには、同じ sourceid の PackageStart イベントと PackageEnd イベント、または OnPreExecute イベントと OnPostExecute イベントの間に表示されるすべてのレコードを識別する必要があります。
さらに、パッケージの 1 つのインスタンスを分析できるように、特定の executionid のみを使用するようにフィルター処理する必要があります (単一の executionid を識別することができる特定の sourceid および PackageEnd イベントの id 列の最大値を簡単に使用できます)。
これは私の知識領域から少し外れているため、これを SQL ステートメントにまとめる方法についてのアイデアはありますか?