Panduan Langkah demi Langkah untuk Menggunakan TRY ... CATCH untuk Mengendalikan Kesilapan SQL Server

Kenal pasti kesilapan tanpa mengganggu pelaksanaan

TRY ... Penyataan CATCH dalam Transact- SQL mengesan dan mengendalikan keadaan ralat dalam aplikasi pangkalan data anda. Kenyataan ini merupakan asas kepada pengendalian ralat SQL Server dan merupakan bahagian penting dalam membangunkan aplikasi pangkalan data mantap. TRY ... CATCH berlaku untuk SQL Server bermula dengan 2008, Azure SQL Database, Azure SQL Data Warehouse dan Gudang Data Serasi.

Memperkenalkan TRY..CATCH

TRY ... CATCH berfungsi dengan membenarkan Anda menentukan dua pernyataan Transact-SQL: yang Anda ingin "cuba" dan yang lain digunakan untuk "menangkap" sebarang kesalahan yang mungkin timbul. Apabila SQL Server menemui TRY ... kenyataan CATCH, ia segera melaksanakan kenyataan yang dimasukkan dalam klausa TRY. Jika penyataan TRY dilaksanakan dengan jayanya, SQL Server hanya bergerak. Walau bagaimanapun, jika kenyataan TRY menjana ralat, SQL Server melaksanakan kenyataan CATCH untuk mengendalikan ralat dengan lembut.

Sintaks asas mengambil bentuk ini:

BEGIN TRY {sql_statement | statement_block} END TRY BEGIN CATCH [{sql_statement | statement_block}] END CATCH [; ]

TRY ... Contoh CATCH

Paling mudah untuk memahami penggunaan pernyataan ini melalui penggunaan contoh. Bayangkan anda adalah pentadbir pangkalan data sumber manusia yang mengandungi jadual bernama "Pekerja," yang mengandungi maklumat mengenai setiap pekerja di organisasi anda. Jadual itu menggunakan nombor ID pekerja integer sebagai kunci utama . Anda mungkin menggunakan kenyataan di bawah untuk memasukkan pekerja baru ke dalam pangkalan data anda:

INSERT INTO (id, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201)

Di bawah keadaan biasa, kenyataan ini akan menambah baris kepada jadual Pekerja. Walau bagaimanapun, jika pekerja dengan ID 12497 sudah wujud dalam pangkalan data, memasukkan baris akan melanggar kekangan utama utama dan mengakibatkan ralat berikut:

Msg 2627, Aras 14, Negeri 1, Talian 1 Pelanggaran kekangan PRIMARY KEY 'PK_employee_id'. Tidak boleh memasukkan kekunci pendua dalam objek 'dbo.employees'. Kenyataan itu telah ditamatkan.

Walaupun ralat ini memberi anda maklumat yang anda perlukan untuk menyelesaikan masalah, terdapat dua isu dengannya. Pertama, mesej itu adalah misteri. Ia termasuk kod ralat, nombor baris dan maklumat lain yang tidak dapat difahami oleh pengguna biasa. Kedua, dan yang lebih penting, ia menyebabkan pernyataan membatalkan dan boleh menyebabkan kemalangan aplikasi.

Alternatifnya ialah membungkus pernyataan dalam TRY ... kenyataan CATCH, seperti ditunjukkan di bawah:

BEGIN TRY INSERT INTO employees (id, first_name, last_name, extension) VALUES (12497, 'Mike', 'Chapple', 4201) END TRY BEGIN CATCH PRINT 'Error:' + ERROR_MESSAGE (); EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Mail Pekerja', @recipients = 'hr@foo.com', @body = 'Ralat berlaku mencipta rekod pekerja baru.', @subject = 'Ralat Duplikasi ID Pekerja'; END CATCH

Dalam contoh ini, sebarang ralat yang berlaku dilaporkan kepada kedua-dua pengguna yang melaksanakan arahan dan hr@foo.com alamat e-mel. Ralat yang ditunjukkan kepada pengguna dipaparkan di bawah:

Ralat: Pelanggaran kekangan PRIMARY KEY 'PK_employee_id'. Tidak boleh memasukkan kekunci pendua dalam objek 'dbo.employees'. Mel gilir.

Paling penting, pelaksanaan aplikasi berterusan secara normal, yang membolehkan pemrogram untuk mengendalikan kesilapan dengan lembut. Penggunaan TRY ... Penyataan CATCH adalah cara yang elegan untuk mengesan dan mengendalikan secara proaktif kesilapan yang berlaku dalam aplikasi pangkalan data SQL Server.

Belajar Lebih Banyak

Sekiranya anda ingin mengetahui lebih lanjut mengenai Bahasa Permintaan Berstruktur, bacalah Pengenalan kepada SQL .