在 TRY...CATCH 构造的 CATCH 块的作用域内,您可以使用以下系统函数:
ERROR_LINE(),返回出现错误的行号。
ERROR_MESSAGE(),返回将返回
给应用程序的消息文本。该文本包括为所有可替换参数提供的值,如长度、对象名或时间。
ERROR_NUMBER() 返回错误号。
ERROR_PROCEDURE(),返回出现错误的存储过程或触发器的名称。如果在存储过程或触发器中未出现错误,该函数返回 NULL。
ERROR_SEVERITY() 返回严重性。
ERROR_STATE(),返回状态。
在执行任何 Transact-SQL 语句之后,您可以立即使用 @@ERROR 函数测试错误并检索错误号。
使用 ERROR_LINE、ERROR_MESSAGE、ERROR_NUMBER、ERROR_PROCEDURE、ERROR_SEVERITY 和 ERROR_STATE
当用于 TRY...CATCH 构造的 CATCH 块的作用域内时,ERROR_LINE、ERROR_MESSAGE、ERROR_NUMBER、ERROR_PROCEDURE、ERROR_SEVERITY 和 ERROR_STATE 函数仅返回错误信息。用于 CATCH 块的作用域外时,它们会返回 NULL。这些函数返回有关导致 CATCH 块被调用的错误的信息。只要是在 CATCH 块的作用域内运行,这些函数即使被引用多次也将返回相同的错误信息。这些函数为 Transact-SQL 语句提供了与返回给应用程序的数据相同的数据。
在嵌套的 CATCH 块中,ERROR_LINE、ERROR_MESSAGE、ERROR_NUMBER、ERROR_PROCEDURE、ERROR_SEVERITY 和 ERROR_STATE 函数返回的错误信息特定于它们在其中被引用的 CATCH 块。例如,外部 TRY...CATCH 构造的 CATCH 块可能具有嵌套 TRY...CATCH 构造。在嵌套的 CATCH 块内,这些函数将返回有关调用内部 CATCH 块的错误的信息。在外部 CATCH 块,这些函数将返回有关调用 CATCH 块的错误的信息。
以下示例通过显示在外部 CATCH 块引用 ERROR_MESSAGE 时,函数返回外部 TRY 块生成的消息文本,说明了此种情况。当在内部 CATCH 块中引用 ERROR_MESSAGE 时,它返回在内部 TRY 块中生成的文本。此示例还说明了在外部 CATCH 块中 ERROR_MESSAGE 始终返回在外部 TRY 块中生成的消息,即使在运行内部 TRY...CATCH 构造后。
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
CREATE PROCEDURE [dbo].[insertTest]
AS
BEGIN
SET NOCOUNT ON;
begin try
--此處編寫需要捕捉錯誤的SQL代碼
end try
begin catch
--顯示錯誤信息
select N'Msg '+Convert(nvarchar(10),@@Error)+
N', Level '+convert(nvarchar(10),ERROR_SEVERITY())+
N', State '+Convert(nvarchar(10),ERROR_STATE())+
N', Procedure '+ERROR_PROCEDURE()+
N', Line '+Convert(nvarchar(20),ERROR_LINE())+char(13)
+ERROR_MESSAGE()
end catch
可以獲取如下格式的錯誤信息
Msg 8152, Level 16, State 14, Procedure insertTest, Line 35
将截断字符串或二进制数据。
來源:SQL Server 2005 联机丛书