ERROR_STATE (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-végpont a Microsoft FabricWarehouse-ban a Microsoft Fabric

Visszaadja annak a hibának az állapotszámát, amely a CATCH blokkot okozta egy TRY-n... CATCH konstrukció futásra kerül.

Transact-SQL szintaxis konvenciók

Syntax

ERROR_STATE ( )  

Visszatérési típusok

int

Visszaadott érték

Ha CATCH blokkot hívnak, visszaadja annak a hibaüzenetnek az állapotszámát, amely a CATCH blokkot futtatta.

Null értéket ad vissza, ha a CATCH blokk hatókörén kívül hívják.

Remarks

Néhány hibaüzenet több ponton is felmerülhet a Microsoft SQL Server Database Engine kódjában. Például egy "1105" hiba több különböző feltétel esetén is előfordulhat. Minden konkrét feltétel, amely a hibát felkelt, egyedi állapotkódot rendel hozzá.

Amikor ismert problémák adatbázisait nézzük, például a Microsoft tudásbázis-t, az állapotszám alapján megállapíthatod, hogy a rögzített hiba ugyanaz lehet-e a hibával, amellyel találkoztál. Például, ha egy Knowledge Base cikk egy 1105-ös hibaüzenetről szól, amelynek állapota 2, és a 1105-ös hibaüzenet állapota 3, akkor a hibád valószínűleg más oka volt, mint amiről a cikkben jelentett.

Az SQL Server támogató mérnöke a hiba állapotkódját is felhasználhatja, hogy megtalálja a forráskódban azt a helyet, ahol a hiba felmerül, ami további ötleteket adhat a probléma diagnosztizálásához.

ERROR_STATE a CATCH blokk hatókörén belül bárhol meghívható.

ERROR_STATE visszaadja a hibaállapotot, függetlenül attól, hányszor futtatják, vagy hol fut a CATCH blokk hatókörén belül. Ez ellentétben áll az olyan függvényekkel, mint az @@ERROR, amely csak a hibaszámot adja vissza az állításban közvetlenül a hibát okozó utasítás után, vagy a CATCH blokk első utasításában.

A beágyazott CATCH blokkokban ERROR_STATE a CATCH blokk hatókörére jellemző hibaállapotot adja vissza, amelyben a hivatkozás van. Például egy külső TRY-n a CATCH blokk... A CATCH konstrukciónak lehet egy beágyazott TRY... CATCH konstrukció. A beépített CATCH blokkon belül ERROR_STATE visszaadja azt az állapotot, amely a beágyazott CATCH blokkot idézte elő hibából. Ha ERROR_STATE a külső CATCH blokkban fut, akkor visszaadja azt az állapotot, amely a CATCH blokkot idézte elő hiba alapján.

Examples

A. ERROR_STATE használata egy CATCH blokkban

Az alábbi példa egy olyan utasítást SELECT mutat be, amely osztva nullával hibát okoz. A hiba állapotát visszaadják.

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

B. ERROR_STATE használata egy CATCH blokkban más hibakezelő eszközökkel

Az alábbi példa egy olyan utasítást SELECT mutat be, amely osztva nullával hibát okoz. A hibaállapot mellett visszaküldik a hibához kapcsolódó információkat is.

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  

Példák: Azure Synapse Analytics és elemzési platformrendszer (PDW)

C. ERROR_STATE használata egy CATCH blokkban más hibakezelő eszközökkel

Az alábbi példa egy olyan utasítást SELECT mutat be, amely osztva nullával hibát okoz. A hibaállapot mellett visszaküldik a hibához kapcsolódó információkat is.

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