在SQL語句中獲取錯誤信息

在 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 构造后。

 

 

Code
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 联机丛书

转载于:https://www.cnblogs.com/weiqi/archive/2009/06/22/1508273.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值