0

我想记录从我的 Transact SQL 脚本中抛出的警告,这些警告不会被 TRY...CATCH 块捕获。有没有办法做到这一点?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 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 回答