Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara menangkap SqlException yang disebabkan oleh kebuntuan?

Kode kesalahan khusus Microsft SQL Server untuk kebuntuan adalah 1205 jadi Anda harus menangani SqlException dan memeriksanya. Jadi, misalnya jika untuk semua jenis SqlException lainnya Anda ingin gelembung pengecualian naik:

catch (SqlException ex)
{
    if (ex.Number == 1205)
    {
        // Deadlock 
    }
    else
        throw;
}

Atau, menggunakan pemfilteran pengecualian yang tersedia di C# 6

catch (SqlException ex) when (ex.Number == 1205)
{
    // Deadlock 
}

Hal yang berguna untuk dilakukan untuk menemukan kode kesalahan SQL yang sebenarnya untuk pesan yang diberikan, adalah dengan mencari di sys.messages di SQL Server.

misalnya

SELECT * FROM sys.messages WHERE text LIKE '%deadlock%' AND language_id=1033

Cara alternatif untuk menangani kebuntuan (dari SQL Server 2005 ke atas), adalah melakukannya dalam prosedur tersimpan menggunakan dukungan TRY...CATCH:

BEGIN TRY
    -- some sql statements
END TRY
BEGIN CATCH
    IF (ERROR_NUMBER() = 1205)
        -- is a deadlock
    ELSE
        -- is not a deadlock
END CATCH

Ada contoh lengkap di sini di MSDN tentang cara menerapkan logika coba lagi kebuntuan murni dalam SQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Buat Pemicu DML di SQL Server

  2. Tidak dapat menggunakan prinsip khusus 'sa'

  3. Filter pada klausa Output sql

  4. sql query untuk mengembalikan perbedaan antara dua tabel

  5. Membagi Partisi menjadi Dua di SQL Server (T-SQL)