0

TRY...CATCH ブロックに引っかからない Transact SQL スクリプトからスローされた警告をログに記録したいと考えています。これを行う方法はありますか?ERROR_NUMBER() などは catch ブロックの外では機能せず、警告がスローされたことを知る方法さえわかりません。グーグルはあまり成果を上げていません。

4

2 に答える 2

1

ドキュメントは、エラーメッセージがパックを呼び出し元に渡すことを意図しているようです。ただし、ストアド プロシージャでステートメントをラップし、それを 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;
于 2012-04-19T19:22:22.330 に答える
0

proc でラップして try しても、これらのエラーを 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;
于 2014-04-09T22:21:27.100 に答える