ERROR_STATE (Transact-SQL)

Gäller för:SQL ServerAzureSQL Managed InstanceAzureSynapse AnalyticsAnalyticsPlatform System (PDW)SQL analytics endpoint in Microsoft FabricWarehousein Microsoft Fabric

Returnerar tillståndsnumret för felet som orsakade CATCH-blocket i en TRY... CATCH-konstruktionen ska köras.

Transact-SQL syntaxkonventioner

Syntax

ERROR_STATE ( )  

Returtyper

int

Returvärde

När den anropas i ett CATCH-block returneras tillståndsnumret för felmeddelandet som orsakade att CATCH-blocket kördes.

Returnerar NULL om det anropas utanför omfattningen av ett CATCH-block.

Remarks

Vissa felmeddelanden kan visas på flera punkter i koden för Microsoft SQL Server Database Engine. Till exempel kan ett "1105"-fel höjas för flera olika tillstånd. Varje specifikt villkor som ger fel tilldelar en unik tillståndskod.

När du tittar på databaser med kända problem, såsom Microsoft Knowledge Base, kan du använda tillståndsnumret för att avgöra om det registrerade problemet kan vara detsamma som det fel du stött på. Till exempel, om en artikel i Knowledge Base diskuterar ett 1105-felmeddelande med tillstånd 2, och felmeddelandet 1105 du fick hade tillstånd 3, hade ditt fel troligen en annan orsak än den som rapporterades i artikeln.

En SQL Server-supportingenjör kan också använda tillståndskoden från ett fel för att hitta platsen i källkoden där felet uppstår, vilket kan ge ytterligare idéer om hur problemet kan diagnostiseras.

ERROR_STATE kan anropas var som helst inom ramen för ett CATCH-block.

ERROR_STATE returnerar felstatusen oavsett hur många gånger den körs eller var den körs inom CATCH-blockets omfattning. Detta står i kontrast till funktioner som @@ERROR, som endast returnerar felnumret i satsen direkt efter den som orsakar felet, eller i den första satsen i ett CATCH-block.

I nästlade CATCH-block returnerar ERROR_STATE felstatusen som är specifik för omfattningen av CATCH-blocket där den refereras. Till exempel, CATCH-blocket på en yttre TRY... CATCH-konstruktionen skulle kunna ha en nästlad FÖRSÖK... CATCH-konstruktionen. Inom det nästlade CATCH-blocket returnerar ERROR_STATE tillståndet från felet som anropade det nästlade CATCH-blocket. Om ERROR_STATE körs i det yttre CATCH-blocket, returnerar det tillståndet från felet som anropade det CATCH-blocket.

Exempel

A. Att använda ERROR_STATE i ett CATCH-block

I följande exempel visas en SELECT instruktion som genererar ett divide-by-zero-fel. Felets tillstånd returneras.

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

B. Att använda ERROR_STATE i ett CATCH-block tillsammans med andra felhanteringsverktyg

I följande exempel visas en SELECT instruktion som genererar ett divide-by-zero-fel. Tillsammans med feltillståndet returneras information som relaterar till felet.

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  

Exempel: Azure Synapse Analytics och analysplattformssystem (PDW)

C. Att använda ERROR_STATE i ett CATCH-block tillsammans med andra felhanteringsverktyg

I följande exempel visas en SELECT instruktion som genererar ett divide-by-zero-fel. Tillsammans med feltillståndet returneras information som relaterar till felet.

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_MESSAGE() AS ErrorMessage;  
END CATCH;  
GO