ERROR_STATE (Transact-SQL)

Platí na:SQL ServerAzureSQL Managed InstanceAzureSynapse AnalyticsAnalyticsPlatform System (PDW)SQL analytics endpoint in Microsoft FabricWarehousein Microsoft Fabric

Vrátí číslo stavu chyby, která způsobila blok CATCH v TRY... Spuštěn konstrukt CATCH.

Transact-SQL konvence syntaxe

Syntax

ERROR_STATE ( )  

Návratové typy

int

Návratová hodnota

Při volání v bloku CATCH vrátí číslo stavu chybové zprávy, která způsobila spuštění bloku CATCH.

Vrací NULL, pokud je vyvolán mimo rozsah bloku CATCH.

Remarks

Některé chybové zprávy lze zobrazit na více místech v kódu Microsoft SQL Server Database Engine. Například chyba "1105" může být zvýšena pro několik různých podmínek. Každá konkrétní podmínka, která chybu vyvolá, přiřadí jedinečný stavový kód.

Při prohlížení databází známých problémů, jako je znalostní báze Microsoft Knowledge Base, můžete použít číslo stavu k určení, zda zaznamenaný problém může být stejný jako chyba, na kterou jste narazili. Například pokud článek ve Znalostní bázi diskutuje chybovou zprávu 1105 se stavem 2 a chybová zpráva 1105, kterou jste obdrželi, měla stav 3, vaše chyba pravděpodobně měla jinou příčinu než ta, která je uvedena v článku.

Inženýr podpory SQL Server může také použít stavový kód chyby k nalezení místa ve zdrojovém kódu, kde je chyba vyvolána, což může poskytnout další nápady, jak problém diagnostikovat.

ERROR_STATE může být volán kdekoli v rámci CATCH bloku.

ERROR_STATE vrací chybový stav bez ohledu na to, kolikrát je spuštěn, nebo kde je spuštěn v rozsahu bloku CATCH. To je na rozdíl od funkcí jako @@ERROR, která vrací chybové číslo pouze v příkazu bezprostředně po tom, které chybu způsobuje, nebo v prvním příkazu bloku CATCH.

V vnořených blocích CATCH ERROR_STATE vrací chybový stav specifický pro rozsah bloku CATCH, na který je odkazován. Například blok CATCH vnější TRY... CATCH konstrukce by mohla mít vnořený TRY... CATCH konstrukce. V rámci vnořeného bloku CATCH ERROR_STATE vrací stav z chyby, která vyvolala vnořený blok CATCH. Pokud je ERROR_STATE vykonána ve vnějším bloku CATCH, vrátí stav z chyby, která tento blok CATCH vyvolala.

Examples

A. Použití ERROR_STATE v bloku CATCH

Následující příklad ukazuje SELECT příkaz, který generuje chybu dělení nulou. Stav chyby se vrátí.

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

B. Použití ERROR_STATE v bloku CATCH s dalšími nástroji pro zpracování chyb

Následující příklad ukazuje SELECT příkaz, který generuje chybu dělení nulou. Spolu se stavem chyby se vrací informace týkající se chyby.

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říklady: Azure Synapse Analytics a systém PDW (Analytics Platform System)

C. Použití ERROR_STATE v bloku CATCH s dalšími nástroji pro zpracování chyb

Následující příklad ukazuje SELECT příkaz, který generuje chybu dělení nulou. Spolu se stavem chyby se vrací informace týkající se chyby.

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