ERROR_STATE (Transact-SQL)

Dotyczy do:SQL ServerAzureSQL Managed InstanceAzureSynapse AnalyticsAnalyticsPlatform System (PDW)SQL analytics endpoint in Microsoft FabricWarehousein Microsoft Fabric

Zwraca numer stanu błędu, który spowodował blok CATCH w TRY... Konstrukcja CATCH do uruchomienia.

Transact-SQL konwencje składni

Syntax

ERROR_STATE ( )  

Typy zwracane

int

Wartość zwracana

Po wywołaniu bloku CATCH zwraca numer stanu komunikatu o błędzie, który spowodował uruchomienie bloku CATCH.

Zwraca NULL, jeśli wywoła się poza zakresem bloku CATCH.

Remarks

Niektóre komunikaty o błędach mogą pojawiać się w wielu miejscach kodu Microsoft SQL Server Database Engine. Na przykład błąd "1105" może być podniesiony dla kilku różnych warunków. Każdy konkretny warunek powodujący błąd przypisuje unikalny kod stanu.

Przeglądając bazy danych znanych problemów, takie jak Baza wiedzy Microsoft Knowledge Base, możesz użyć numeru stanu, aby sprawdzić, czy zarejestrowany problem może być taki sam jak błąd, na który natrafiłeś. Na przykład, jeśli artykuł w Knowledge Base omawia komunikat o błędzie 1105 o stanie 2, a otrzymany komunikat 1105 miał stan 3, Twój błąd prawdopodobnie miał inną przyczynę niż ta opisana w artykule.

Inżynier wsparcia SQL Server może również użyć kodu stanu z błędu, aby znaleźć miejsce w kodzie źródłowym, gdzie ten błąd jest zgłaszany, co może dostarczyć dodatkowych wskazówek dotyczących diagnozy problemu.

ERROR_STATE może być wywołany w dowolnym miejscu w zakresie bloku CATCH.

ERROR_STATE zwraca stan błędu niezależnie od liczby jego uruchomień lub tego, gdzie jest uruchamiany w zakresie bloku CATCH. Jest to w przeciwieństwie do funkcji takich jak @@ERROR, które zwracają numer błędu tylko w instrukcji bezpośrednio po tej, która powoduje błąd, lub w pierwszym poleceniu bloku CATCH.

W zagnieżdżonych blokach CATCH ERROR_STATE zwraca stan błędu specyficzny dla zakresu bloku CATCH, do którego się odwołuje. Na przykład blok CATCH zewnętrznego TRY... Konstrukcja CATCH mogłaby mieć zagnieżdżone TRY... Konstrukt CATCH. W zagnieżdżonym bloku CATCH ERROR_STATE zwraca stan z błędu, który wywołał zagnieżdżony blok CATCH. Jeśli ERROR_STATE jest wykonywany w zewnętrznym bloku CATCH, zwraca stan z błędu, który wywołał ten blok CATCH.

Examples

A. Wykorzystanie ERROR_STATE w bloku CATCH

W poniższym przykładzie pokazano instrukcję SELECT , która generuje błąd dzielenia przez zero. Zwracany jest stan błędu.

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

B. Wykorzystanie ERROR_STATE w bloku CATCH z innymi narzędziami do obsługi błędów

W poniższym przykładzie pokazano instrukcję SELECT , która generuje błąd dzielenia przez zero. Wraz ze stanem błędu zwracane są informacje związane z tym błędem.

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  

Przykłady: system platformy Azure Synapse Analytics i analizy (PDW)

C. Wykorzystanie ERROR_STATE w bloku CATCH z innymi narzędziami do obsługi błędów

W poniższym przykładzie pokazano instrukcję SELECT , która generuje błąd dzielenia przez zero. Wraz ze stanem błędu zwracane są informacje związane z tym błędem.

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