ERROR_STATE (T-SQL)

Berlaku untuk: SQL Server (semua versi yang didukung) Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW)

Mengembalikan jumlah status kesalahan yang menyebabkan blok CATCH dari TRY... Konstruksi CATCH yang akan dijalankan.

tautan topikIkon Konvensi Sintaks Transact-SQL

Sintaks

ERROR_STATE ( )  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.

Jenis Pengembalian

int

Tampilkan Nilai

Ketika dipanggil di blok CATCH, mengembalikan nomor status pesan kesalahan yang menyebabkan blok CATCH dijalankan.

Mengembalikan NULL jika dipanggil di luar cakupan blok CATCH.

Keterangan

Beberapa pesan kesalahan dapat dimunculkan di beberapa titik dalam kode untuk Microsoft SQL Server Database Engine. Misalnya, kesalahan "1105" dapat dimunculkan untuk beberapa kondisi yang berbeda. Setiap kondisi spesifik yang menimbulkan kesalahan menetapkan kode status unik.

Saat melihat database masalah yang diketahui, seperti Pangkalan Pengetahuan Microsoft, Anda dapat menggunakan nomor status untuk menentukan apakah masalah yang direkam mungkin sama dengan kesalahan yang Anda alami. Misalnya, jika artikel Pangkalan Pengetahuan membahas pesan kesalahan 1105 dengan status 2, dan pesan kesalahan 1105 yang Anda terima memiliki status 3, kesalahan Anda mungkin memiliki penyebab yang berbeda dari yang dilaporkan dalam artikel.

Teknisi dukungan SQL Server juga dapat menggunakan kode status dari kesalahan untuk menemukan lokasi dalam kode sumber tempat kesalahan tersebut dimunculkan, yang dapat memberikan ide tambahan tentang cara mendiagnosis masalah.

ERROR_STATE dapat dipanggil di mana saja dalam cakupan blok CATCH.

ERROR_STATE mengembalikan status kesalahan terlepas dari berapa kali dijalankan, atau di mana ia dijalankan dalam cakupan blok CATCH. Ini berbeda dengan fungsi seperti @@ERROR, yang hanya mengembalikan nomor kesalahan dalam pernyataan segera setelah yang menyebabkan kesalahan, atau dalam pernyataan pertama blok CATCH.

Dalam blok CATCH berlapis, ERROR_STATE mengembalikan status kesalahan khusus untuk cakupan blok CATCH tempat blok tersebut direferensikan. Misalnya, blok CATCH dari TRY luar... Konstruksi CATCH bisa memiliki berlapis TRY ... KONSTRUKSI CATCH. Dalam blok CATCH berlapis, ERROR_STATE mengembalikan status dari kesalahan yang memanggil blok CATCH berlapis. Jika ERROR_STATE dijalankan di blok CATCH luar, ia mengembalikan status dari kesalahan yang memanggil blok CATCH tersebut.

Contoh

A. Menggunakan ERROR_STATE dalam blok CATCH

Contoh berikut menunjukkan SELECT pernyataan yang menghasilkan kesalahan bagi-demi-nol. Status kesalahan dikembalikan.

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

B. Menggunakan ERROR_STATE di blok CATCH dengan alat penanganan kesalahan lainnya

Contoh berikut menunjukkan SELECT pernyataan yang menghasilkan kesalahan bagi-demi-nol. Seiring dengan status kesalahan, informasi yang berkaitan dengan kesalahan dikembalikan.

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  

Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)

C. Menggunakan ERROR_STATE di blok CATCH dengan alat penanganan kesalahan lainnya

Contoh berikut menunjukkan SELECT pernyataan yang menghasilkan kesalahan bagi-demi-nol. Seiring dengan status kesalahan, informasi yang berkaitan dengan kesalahan dikembalikan.

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  

Lihat juga

sys.messages (Transact-SQL)
Mencoba... CATCH (Transact-SQL)
ERROR_LINE (T-SQL)
ERROR_MESSAGE (Transact-SQL)
ERROR_NUMBER (T-SQL)
ERROR_PROCEDURE (T-SQL)
ERROR_SEVERITY (T-SQL)
RAISERROR (Transact-SQL)
@@ERROR (T-SQL)
Kesalahan dan Referensi Peristiwa (Mesin Database)