如何在 SQL 2008 R2 中记录警告(低严重性错误)



我想记录从我的事务处理SQL脚本中引发的警告,这些警告不会被TRY捕获...捕捉块。 有什么办法可以做到这一点吗? ERROR_NUMBER() 等在 catch 块之外不起作用,我不确定如何知道是否发出了警告。 谷歌搜索并没有产生太多结果。

文档似乎打算将错误消息传递给调用方。但是,它还指出,如果将语句包装在存储过程中,然后在 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;
即使您

将其包装在 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;

最新更新