Skip to main content

Menggunakan TRY ... CATCH untuk Mengendalikan Kesilapan SQL Server

Day 3 Keynote: Made Here Together (Cloud Next '18) (April 2025)

Day 3 Keynote: Made Here Together (Cloud Next '18) (April 2025)
Anonim

TRY … Penyataan CATCH dalam Transact-SQL mengesan dan mengendalikan keadaan ralat dalam aplikasi pangkalan data. 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 Warehouse Data Parallel.

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. Sekiranya pernyataan TRY berjaya dilaksanakan, SQL Server akan bergerak. Walau bagaimanapun, jika penyataan TRY menjana ralat, SQL Server melaksanakan kenyataan CATCH untuk menangani ralat dengan anggun.

Sintaks asas mengambil bentuk ini:

BEGIN TRY blok pernyataan END TRYBEGIN CUCIsql_statementEND CATCH ;

TRY … Contoh CATCH

Sangat mudah untuk memahami penggunaan pernyataan ini melalui 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 employees (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, Baris 1Pelanggaran kekangan PRIMARY KEY 'PK_employee_id'. Tidak boleh memasukkan kekunci pendua dalam objek 'dbo.employees'.Kenyataan itu telah ditamatkan.

Walaupun ralat ini memberikan anda maklumat yang anda perlukan untuk menyelesaikan masalah, terdapat dua masalah 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 sini:

BEGIN TRYINSERT INTO employees (id, first_name, last_name, extension)VALUES (12497, 'Mike', 'Chapple', 4201)END TRYBEGIN CUCIPRINT 'ERROR:' + ERROR_MESSAGE ();EXEC msdb.dbo.sp_send_dbmail@profile_name = 'Surat Pekerja',@recipients = '[email protected]',@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 [email protected] alamat e-mel. Ralat yang ditunjukkan kepada pengguna adalah:

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

Pelaksanaan aplikasi berterusan secara normal, yang membolehkan pengaturcara mengendalikan ralat. 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 Pertanyaan Struktur, lihat Pengenalan kepada SQL.