1

SSIS パッケージを構築し、イベント ハンドラーを実装しようとしています。

完全なプロセスのどこかでエラーが発生するたびに、System::SourceName 、 System::ErrorDescription 、 System::ErrorCode、およびSystem::ExecutionInstanceGUIDを使用してテーブルにログ エントリを作成する必要があります。

このために、以下に示すようなテーブルを作成しました。

CREATE TABLE [dbo].[ErrorLog]([LogID] [int] IDENTITY(1,1) NOT NULL,
[ExecutionID] [nvarchar](255) NULL,[SourceName] [varchar](255) NOT NULL,
[Message] [nvarchar](max) NOT NULL,
[MessageCode] [int] NOT NULL,
[LogDateTime] [datetime] NOT NULL
) ON [PRIMARY]

パッケージ レベルでOnErrorイベント ハンドラを作成しました。使用される SQL クエリは INSERT INTO [ErrorLog]([ExecutionID],[SourceName],[Message],[MessageCode],
[LogDateTime]) VALUES(?,?,?,?,getdate()) です。

私が直面している問題は、パッケージ内のどこかでエラーが発生すると、イベント ハンドラーが呼び出しを示す緑色になりますが、データベースのテーブルにはエントリが表示されません。

ただし、そのテーブルに手動で新しい行を作成するたびに、列 [LogID] の次の ID 値で新しい行が追加されるため、エラーが発生するたびに行が挿入されると確信しています。

たとえば、LogID 列の値が74で、パッケージでエラーが発生した場合、行が追加されず、ErrorLog テーブルにレコードを手動で挿入すると、挿入される ID は76であるとします。

何がうまくいかないのかわからない。

私はこの修正を行っており、何か助けていただければ幸いです。

ありがとうモヒット

4

1 に答える 1

1

これは、挿入がロールバックされているようです。

パッケージの取引管理はありますか?

テストするために、onerror イベントでコンポーネントのトランザクション サポート プロパティを設定し、エラーをトリガーしたタスクを NotSupported に設定します。これは、タスクがパッケージまたは他の親タスクによって開始されたトランザクションに参加しないことを示します。

于 2012-05-06T12:59:59.857 に答える