1

そのため、私の SSIS パッケージは、クエリの実行が失敗するたびに、クエリの実行からのメッセージをエラーとしてログに記録します。たとえば、私のクエリには 2 つの Print ステートメントがあり、何らかの理由でエラーのためにクエリが失敗します。SSIS は、実際のエラーと共に 2 つの print ステートメントをすべてログに記録しています。SSIS パッケージで印刷メッセージをエラーとしてログに記録したくありません。私のパッケージは、「OnError」イベント ハンドラでこの情報を読み取っています。ログのソースは System::ErrorDescription に設定されています。次のクエリを検討してください。

PRINT 'Trying to set string value to a datetime column.'
PRINT 'So i should get this error: Conversion failed when converting date and/or time from character string.'
UPDATE TempTable SET CreateDateTime = 'StringValue'

以下は、SQL Management Studio からの出力/メッセージです。最後の行が実際のエラーで、残りの行はすべて Print ステートメントです。

Trying to set string value to a datetime column.
So i should get this error: Conversion failed when converting date and/or time from character string.

**Msg 3930, Level 16, State 1, Procedure pr_TempTable, Line 3 Conversion failed when converting date and/or time from character string.**

しかし、メッセージウィンドウからのこれらの3行はすべて、SQLタスクを実行してこのクエリを実行しようとすると、SSISのOnErrorイベントハンドラーによって複数のエラーとして扱われます。

4

1 に答える 1

2

最初は、あなたが実際に RAISERROR を使用してステートメントを「印刷」しているのではないかと疑っていましたが、これはかなり一般的な方法です。

しかし、さらに調査したところ、同じスクリプト内の後続の RAISERROR によって呼び出し元のアプリケーションに送信されるエラー メッセージに PRINT コマンドが含まれているのが標準的な動作であることがわかりました。

したがって、スクリプトで RAISERROR を使用しない場合、PRINT ステートメントは SSIS によってエラーとして扱われません。ただし、RAISERROR を使用すると、発生するエラー メッセージに RAISERROR の前に発生した PRINT ステートメントが含まれます。

奇妙で直感的とは言えませんが、標準的な動作のようであり、回避する必要があるようです。

于 2015-10-15T18:22:26.713 に答える