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

SQL Server:Rethrow pengecualian dengan nomor pengecualian asli

Anda mungkin dapat menampilkannya kembali seperti ini:

..
END TRY
BEGIN CATCH
    DECLARE @errnum int;
    SELECT @errnum = ERROR_NUMBER();
    RAISERROR (@errnum, 16, 1);
END CATCH

Namun, kemungkinan besar Anda kehilangan makna karena %s etc placeholder di baris sys.messages untuk ERROR_NUMBER()

Anda dapat melakukan sesuatu seperti ini untuk memasukkan nomor dan menampilkan kembali pesan aslinya

..
END TRY
BEGIN CATCH
    DECLARE @errnum nchar(5), @errmsg nvarchar(2048);
    SELECT
        @errnum = RIGHT('00000' + ERROR_NUMBER(), 5),
        @errmsg = @errnum + ' ' + ERROR_MESSAGE();
    RAISERROR (@errmsg, 16, 1);
END CATCH

5 karakter pertama adalah angka asli.

Tetapi jika Anda memiliki kode bersarang, maka Anda akan mendapatkan "00123 00456 Error text".

Secara pribadi, saya hanya menangani nomor Pengecualian SQL untuk memisahkan kesalahan saya (50000) dari kesalahan Mesin (misalnya parameter yang hilang) di mana kode saya tidak berjalan.

Akhirnya, Anda bisa membagikan nilai kembaliannya.

Saya mengajukan pertanyaan tentang ini:Penanganan kesalahan SQL Server:pengecualian dan kontrak klien database



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kesalahan terjadi saat membuat koneksi ke SQL Server

  2. C# ASP.Net:Pengecualian (hanya beberapa kali) selama operasi basis data yang lama

  3. database:kunci utama, Clustered atau NonClustered

  4. IIF(...) bukan fungsi bawaan yang dikenali

  5. Tidak dapat masuk ke SQL Server 2008 melalui utilitas baris perintah