ERROR_STATE (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnalytics Platform Sistemi (PDW)Microsoft FabricAmbarı'nda SQL analiz uç noktası

TRY'nin CATCH blokuna neden olan hatanın durum numarasını döndürür... CATCH yapımı çalıştırılacak.

Transact-SQL söz dizimi kuralları

Syntax

ERROR_STATE ( )  

Dönüş Türleri

int

Dönüş Değeri

Bir CATCH bloğunda çağrıldığında, CATCH bloğunun çalıştırılmasına neden olan hata mesajının durum numarasını döndürür.

CATCH bloğunun kapsamı dışında çağrılırsa NULL döner.

Remarks

Microsoft SQL Server Database Engine kodunda bazı hata mesajları birden fazla noktada yükseltilebilir. Örneğin, birkaç farklı koşul için "1105" hatası oluşturulabilir. Hatayı ortaya çıkaran her özel koşul benzersiz bir durum kodu atar.

Microsoft Bilgi Bankası gibi bilinen sorunların veritabanlarını incelerken, kayıtlı sorunun karşılaştığınız hata ile aynı olup olmadığını belirlemek için durum numarasını kullanabilirsin. Örneğin, bir Bilgi Tabanı makalesi 1105 hata mesajını 2 durumu ile tartışıyorsa ve aldığınız 1105 hata mesajı 3 durumundaysa, hatanızın nedeni muhtemelen makalede bildirilenden farklıdır.

Bir SQL Server destek mühendisi, hata durumundan alınan durum kodunu kullanarak kaynak kodda hatanın kaynağı konumunu bulabilir; bu da sorunun teşhisi için ek fikirler sağlayabilir.

ERROR_STATE bir CATCH blokunun kapsamı içinde herhangi bir yerde çağrılabilir.

ERROR_STATE, hata durumunu kaç kez çalıştırılırsa çalıştırsın veya CATCH bloğunun kapsamında nerede çalıştırılırsa çalıştırsın döndürür. Bu, @@ERROR gibi fonksiyonların aksine, sadece hata yapan ifadedeki hata sayısını hemen ardından döndüren veya CATCH bloğunun ilk ifadesindeki hata sayısını döndürür.

İçiçe CATCH bloklarında, ERROR_STATE, referans bulunduğu CATCH bloğunun kapsamına özgü hata durumunu döndürür. Örneğin, dış TRY'nin CATCH bloğu... CATCH yapısı iç içe bir TRY... CATCH yapı. İç içe CATCH bloğu içinde, ERROR_STATE iç içe CATCH bloğunu çağıran hatadan gelen durumu döndürür. Eğer ERROR_STATE dış CATCH blokunda çalıştırılırsa, o CATCH bloğunu çağıran hatadan gelen durumu döndürür.

Examples

A. CATCH blokunda ERROR_STATE kullanmak

Aşağıdaki örnekte sıfıra bölme hatası oluşturan bir deyim gösterilmektedir SELECT . Hata durumu döner.

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'yi CATCH blokunda diğer hata işleme araçlarıyla kullanmak

Aşağıdaki örnekte sıfıra bölme hatası oluşturan bir deyim gösterilmektedir SELECT . Hata durumu ile birlikte hatayla ilgili bilgiler de döner.

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  

Örnekler: Azure Synapse Analytics ve Analiz Platformu Sistemi (PDW)

C. ERROR_STATE'yi CATCH blokunda diğer hata işleme araçlarıyla kullanmak

Aşağıdaki örnekte sıfıra bölme hatası oluşturan bir deyim gösterilmektedir SELECT . Hata durumu ile birlikte hatayla ilgili bilgiler de döner.

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