ERROR_LINE (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體

此函式會傳回發生錯誤造成執行 TRY...CATCH 建構之 CATCH 區塊的行號。

Transact-SQL 語法慣例

Syntax

ERROR_LINE ( )

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

傳回類型

int

傳回值

在 CATCH 區塊中呼叫時,ERROR_LINE 會傳回

  • 發生錯誤的行號
  • 常式中的行號 (如果在預存程序或觸發程序內發生錯誤)
  • NULL (如果在 CATCH 區塊範圍之外呼叫)。

備註

可以在 CATCH 區塊範圍內的任何位置呼叫 ERROR_LINE

ERROR_LINE 會傳回發生錯誤的行號。 不論在 CATCH 區塊範圍內的哪個位置呼叫 ERROR_LINE,以及呼叫 ERROR_LINE 的次數為何,都是如此。 這有別於 @@ERROR 之類的函數。 @@ERROR 會在緊接於發生錯誤的陳述式之後的陳述式中,或在 CATCH 區塊的第一個陳述式中,傳回錯誤號碼。

在巢狀 CATCH 區塊中,ERROR_LINE 會傳回參考它的 CATCH 區塊範圍特定的錯誤行號。 例如,TRY...CATCH 建構的 CATCH 區塊可能包含巢狀的 TRY...CATCH 建構。 在巢狀 CATCH 區塊內,ERROR_LINE 會傳回叫用巢狀 CATCH 區塊之錯誤的行號。 如果 ERROR_LINE 是在外部 CATCH 區塊內執行,它會傳回叫用該特定 CATCH 區塊之錯誤的行號。

範例

A. 在 CATCH 區塊中使用 ERROR_LINE

此程式碼範例會顯示產生除以零之錯誤的 SELECT 陳述式。 ERROR_LINE 會傳回發生錯誤的行號。

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

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  

C. 在含有其他錯誤處理工具的 CATCH 區塊中使用 ERROR_LINE

此程式碼範例會顯示產生除以零之錯誤的 SELECT 陳述式。 ERROR_LINE 會傳回發生錯誤的行號,以及與錯誤本身相關的資訊。

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  

另請參閱

TRY...CATCH (Transact-SQL)
sys.messages (Transact-SQL)
ERROR_NUMBER (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)