Menggunakan TRY/CATCH untuk Menangani Kesalahan SQL Server

Pernyataan TRY/CATCH di Transact-SQL mendeteksi dan menangani kondisi kesalahan dalam aplikasi database. Pernyataan ini adalah landasan dari SQL Penanganan kesalahan server dan merupakan bagian penting dari pengembangan aplikasi database yang kuat.

TRY/CATCH berlaku untuk SQL Server mulai tahun 2008, Azure SQL Database, Azure SQL Data Warehouse, dan Parallel Data Warehouse.

Memperkenalkan TRY/CATCH

TRY./CATCH bekerja dengan menentukan dua pernyataan Transact-SQL: satu yang ingin Anda "coba" dan satu lagi untuk "menangkap" kesalahan yang mungkin muncul. Ketika SQL Server menemukan pernyataan TRY/CATCH, SQL Server segera mengeksekusi pernyataan yang termasuk dalam klausa TRY. Jika pernyataan TRY berhasil dijalankan, SQL Server melanjutkan. Namun, jika pernyataan TRY menghasilkan kesalahan, SQL Server mengeksekusi pernyataan CATCH untuk menangani kesalahan dengan anggun.

Sintaks dasar mengambil bentuk ini:

MULAI COBA
{ sql_statement | blok pernyataan }
AKHIR COBA
MULAI TANGKAP
[ { sql_statement | blok_pernyataan } ]
AKHIR TANGKAP
[; ]
instagram viewer

COBA/CATCH Contoh

Pertimbangkan database sumber daya manusia yang berisi tabel bernama para karyawan, yang berisi informasi tentang masing-masing karyawan di suatu perusahaan. Tabel itu menggunakan nomor ID karyawan bilangan bulat sebagai kunci utama.

Anda mungkin mencoba menggunakan pernyataan di bawah ini untuk memasukkan karyawan baru ke dalam database Anda:

INSERT INTO karyawan (id, first_name, last_name, ekstensi)
NILAI(12497, 'Mike', 'Chapple', 4201)

Dalam keadaan normal, pernyataan ini akan menambahkan baris ke tabel Karyawan. Namun, jika karyawan dengan ID 12497 sudah ada di database, memasukkan baris akan melanggar batasan kunci utama dan mengakibatkan kesalahan berikut:

Pesan 2627, Level 14, Status 1, Baris 1
Pelanggaran batasan PRIMARY KEY 'PK_employee_id'. Tidak dapat menyisipkan kunci duplikat di objek 'dbo.employees'.
Pernyataan telah dihentikan.

Meskipun kesalahan ini memberi Anda informasi yang Anda butuhkan untuk memecahkan masalah, ada dua masalah dengannya. Pertama, pesannya samar. Ini termasuk kode kesalahan, nomor baris, dan informasi lain yang tidak dapat dipahami oleh rata-rata pengguna. Kedua, dan yang lebih penting, itu menyebabkan pernyataan dibatalkan dan dapat menyebabkan aplikasi macet.

Alternatifnya adalah dengan membungkus pernyataan dalam pernyataan TRY…CATCH, seperti yang ditunjukkan di sini:

MULAI COBA
INSERT INTO karyawan ( id, first_name, last_name, ekstensi)
NILAI(12497, 'Mike', 'Chapple', 4201)
AKHIR COBA
MULAI TANGKAP
CETAK 'ERROR: ' + ERROR_MESSAGE();
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Surat Karyawan',
@penerima = '[email protected]',
@body = 'Terjadi kesalahan saat membuat catatan karyawan baru.',
@subjek = 'Kesalahan Basis Data Karyawan' ;
AKHIR TANGKAP

Dalam contoh ini, setiap kesalahan yang terjadi dilaporkan ke pengguna yang menjalankan perintah dan alamat email [email protected]. Kesalahan yang ditunjukkan kepada pengguna adalah:

Kesalahan: Pelanggaran batasan PRIMARY KEY 'PK_employee_id'. 
Tidak dapat menyisipkan kunci duplikat di objek 'dbo.employees'.
Surat antri.

Eksekusi aplikasi berlanjut secara normal, memungkinkan pemrogram untuk menangani kesalahan. Penggunaan pernyataan TRY/CATCH adalah cara yang elegan untuk secara proaktif mendeteksi dan menangani kesalahan yang terjadi dalam aplikasi database SQL Server.

Belajar Lebih Banyak

Untuk mempelajari lebih lanjut tentang Bahasa Kueri Terstruktur, lihat artikel kami Dasar-dasar SQL.