2012-04-19 22 views
0

TRY ... CATCHブロックで捕捉されないTransact SQLスクリプトからスローされた警告を記録したいと思います。これを行う方法はありますか? ERROR_NUMBER()などはキャッチブロック外では機能しません。警告がスローされたことを知る方法を知る方法がわかりません。グーグルはあまり得意ではありません。SQL 2008 R2で警告(重大度の低いエラー)を記録する方法

+0

どのDBMS? PostgreSQL?オラクル? DB2? –

+0

私はMSSQLについて質問していたことを明確にするために質問に言葉を追加しました。これを指摘してくれてありがとう。 –

答えて

1

documentationは、エラーメッセージを発信者に渡すことを意図しているようです。ただし、ステートメントをストアドプロシージャにラップし、try-catchブロック内でそのステートメントを呼び出すと、重大度の低いエラーが発生する可能性があります。

-- Verify that the stored procedure does not exist. 
IF OBJECT_ID (N'usp_ExampleProc', N'P') IS NOT NULL 
    DROP PROCEDURE usp_ExampleProc; 
GO 

-- Create a stored procedure that will cause an 
-- object resolution error. 
CREATE PROCEDURE usp_ExampleProc 
AS 
    SELECT * FROM NonexistentTable; 
GO 

BEGIN TRY 
    EXECUTE usp_ExampleProc; 
END TRY 
BEGIN CATCH 
    SELECT 
     ERROR_NUMBER() AS ErrorNumber 
     ,ERROR_MESSAGE() AS ErrorMessage; 
END CATCH; 
+0

存在しないテーブルから選択しても、優先度の低い例外は発生しません。実際にはレベル16です。 – JBone

0

procでラップして試しても、try catchでこれらのエラーをキャッチすることはできません。ここに例があります。

CREATE PROC P 
AS 
BEGIN 
    RAISERROR('TEST',9,-1,-1) 
END; 

BEGIN TRY 
    EXEC P 
END TRY 
BEGIN CATCH 
    PRINT 'CAUGHT' 
END CATCH; 
関連する問題