首页 > 技术文章 > SQL Server 错误行号

qianlixing 2015-09-10 23:07 原文

https://msdn.microsoft.com/zh-cn/library/ms178600.aspx

返回发生错误的行号,该错误导致运行 TRY…CATCH 构造的 CATCH 块。

语法
ERROR_LINE ( )
 
返回值

当在 CATCH 块中调用时:

  • 返回发生错误的行号。

  • 如果错误发生在存储过程或触发器中,则返回例程中的行号。

如果在 CATCH 块作用域以外调用,则返回 NULL。

 

示例

A.在 CATCH 块中使用 ERROR_LINE

下面的代码示例显示生成被零除错误的 SELECT 语句。 返回发生错误的行号。

1. BEGIN TRY
2.    -- Generate a divide-by-zero error.
3.    SELECT 1/0;
END TRY
BEGIN CATCH
    SELECT ERROR_LINE() AS ErrorLine;
END CATCH;
GO

 

begin try前面的空行也会计算在内,测试如下:

B.带存储过程在 CATCH 块中使用 ERROR_LINE

下面的代码示例演示一个生成被零除错误的存储过程。 ERROR_LINE 返回发生错误的存储过程中的行号。

-- Verify that the stored procedure does not already exist.
IF OBJECT_ID ( 'usp_ExampleProc', 'P' ) IS NOT NULL 
    DROP PROCEDURE usp_ExampleProc;
GO

-- Create a stored procedure that 
-- generates a divide-by-zero error.
CREATE PROCEDURE usp_ExampleProc
AS
    SELECT 1/0;
GO

BEGIN TRY
    -- Execute the stored procedure inside the TRY block.
    EXECUTE usp_ExampleProc;
END TRY
BEGIN CATCH
    SELECT ERROR_LINE() AS ErrorLine;
END CATCH;
GO

 结果显示行号是从GO之后开始计算

C.带其他错误处理工具在 CATCH 块中使用 ERROR_LINE

下面的代码示例显示生成被零除错误的 SELECT 语句。 错误的相关信息与发生错误的行号一同返回。

BEGIN TRY
    -- Generate a divide-by-zero error.
    SELECT 1/0;
END TRY
BEGIN CATCH
    SELECT
        ERROR_NUMBER() AS ErrorNumber,
        ERROR_SEVERITY() AS ErrorSeverity,
        ERROR_STATE() AS ErrorState,
        ERROR_PROCEDURE() AS ErrorProcedure,
        ERROR_LINE() AS ErrorLine,
        ERROR_MESSAGE() AS ErrorMessage;
END CATCH;
GO

 结果如图:

ERROR_LINE对我们调试定位查询错误的时候有很大的帮助。

 

推荐阅读