ERROR_MESSAGE (Transact-SQL)

適用於:Microsoft Fabric 中 Microsoft Fabric倉儲中的 SQL ServerAzure SQL 資料庫 Azure SQL 受控執行個體 Azure SynapseAnalytics Analytics Platform System (PDW)SQL 分析端點

此函式會傳回造成執行 TRY...CATCH 建構的 CATCH 區塊之錯誤的訊息文字。

Transact-SQL 語法慣例

Syntax

ERROR_MESSAGE ( )   

注意

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

傳回型別

nvarchar(4000)

傳回值

在 CATCH 區塊中呼叫時,ERROR_MESSAGE 會傳回造成執行 CATCH 區塊之錯誤訊息的完整文字。 文字包括提供給任何可替代參數的值;例如,長度、物件名稱或次數。

在 CATCH 區塊範圍之外呼叫時,ERROR_MESSAGE 會傳回 NULL。

備註

ERROR_MESSAGE 支援在 CATCH 區塊範圍內的任何位置呼叫。

不論執行多少次,或在 CATCH 區塊範圍內的哪個位置執行,ERROR_MESSAGE 都會傳回相關的錯誤訊息。 這有別於 @@ERROR 之類的函式,其只會在緊接於發生錯誤的陳述式之後的陳述式中,傳回錯誤號碼。

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

範例

A. 在 CATCH 區塊中使用 ERROR_MESSAGE

此範例會顯示產生除以零之錯誤的 SELECT 陳述式。 CATCH 區塊會傳回錯誤訊息。

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

以下為結果集。

-----------

(0 row(s) affected)

ErrorMessage
----------------------------------
Divide by zero error encountered.

(1 row(s) affected)

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

此範例會顯示產生除以零之錯誤的 SELECT 陳述式。 除了錯誤訊息,CATCH 區塊也會傳回該錯誤的相關資訊。

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  

以下為結果集。

-----------

(0 row(s) affected)

ErrorNumber ErrorSeverity ErrorState  ErrorProcedure  ErrorLine  ErrorMessage
----------- ------------- ----------- --------------- ---------- ----------------------------------
8134        16            1           NULL            4          Divide by zero error encountered.

(1 row(s) affected)

另請參閱

sys.messages (Transact-SQL)
TRY...CATCH (Transact-SQL)
ERROR_LINE (Transact-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_PROCEDURE (Transact-SQL)
ERROR_SEVERITY (Transact-SQL)
ERROR_STATE (Transact-SQL)
RAISERROR (Transact-SQL)
@@ERROR (Transact-SQL)
錯誤和事件參考 (Database Engine)