SQL Server menyediakan TRY CATCH
mekanisme untuk memungkinkan aplikasi menyadari bahwa ada sesuatu yang salah dan mengeksekusi kode yang sesuai untuk menangani masalah tersebut. Misalnya:
BEGIN TRY <some code> END TRY BEGIN CATCH PRINT 'This is the error: ' + error_message() END CATCH
Kode di TRY
blok dieksekusi terlebih dahulu. Jika terjadi kesalahan, eksekusi diteruskan ke CATCH
blokir.
Apa implikasi untuk penanganan kesalahan jika Anda ingin menggunakan TRY CATCH
dengan server yang terhubung? Dalam situasi ini, kesalahan dapat terjadi di:
- Contoh SQL Server lokal.
- Antarmuka SQL Server digunakan untuk memfasilitasi koneksi dengan server jauh.
- Antarmuka yang digunakan untuk membuat server jauh dapat diakses oleh SQL Server.
Contoh penyiapan kami akan menggunakan server Salesforce.com sebagai server jarak jauh. Untuk jenis server jarak jauh ini, antarmuka 2. adalah Penyedia Microsoft OLE DB untuk Driver ODBC dan antarmuka 3. adalah driver ODBC Salesforce.com Easysoft.
Galat berikut ini terjadi secara lokal di SQL Server. Server tertaut bernama SALESFORCE
belum dibuat sehingga SQL Server tidak dapat menemukannya:
BEGIN TRY EXEC('SELECT * FROM OPENQUERY(SALESFORCE, ''SELECT * FROM LEASE'')') END TRY BEGIN CATCH PRINT 'This is the error: ' + error_message() END CATCH
This is the error: Could not find server 'SALESFORCE' in sys.servers. Verify that the correct server name was specified. If necessary, execute the stored procedure sp_addlinkedserver to add the server to sys.servers.
Kesalahan berikutnya terjadi di Microsoft OLE DB Provider untuk lapisan ODBC Drivers. Server tertaut bernama SALESFORCE
referensi sumber data ODBC yang berisi detail koneksi untuk server target Salesforce.com. Namun, SQL Server 64-bit tetapi sumber data ODBC telah disiapkan di Administrator ODBC 32-bit. Sambungan gagal dengan kesalahan "ketidakcocokan arsitektur"
OLE DB provider "MSDASQL" for linked server "SALESFORCE" returned message "[Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch between the Driver and Application". This is the error: Cannot initialize the data source object of OLE DB provider "MSDASQL" for linked server "SALESFORCE".
Perhatikan bahwa interpretasi SQL Server dari kesalahan OLE DB telah ditangkap oleh CATCH
memblokir. Kesalahan "mentah" dari lapisan OLEDB belum.
Kesalahan terakhir ini terjadi di lapisan ODBC yang digunakan untuk terhubung ke Salesforce.com. Kueri pemilihan merujuk ke objek Salesforce.com kustom ("LEASE") yang belum diaktifkan dan diisi. "[Easysoft ODBC]Tabel dasar atau tampilan SEWA tidak ditemukan" adalah kesalahan dari pengandar ODBC, yang diteruskan ke dan ditampilkan oleh penyedia Microsoft OLE DB untuk pengandar ODBC. Seperti pada contoh sebelumnya, pesan ini tidak dapat dijebak, interpretasi SQL Server atas pesan tersebut dapat dijebak.
OLE DB provider "MSDASQL" for linked server "SALESFORCE" returned message "[Easysoft ODBC]Base table or view LEASE not found". This is the error: An error occurred while preparing the query "SELECT * FROM LEASE" for execution against OLE DB provider "MSDASQL" for linked server "SALESFORCE".
Untuk informasi lebih lanjut tentang penanganan kesalahan SQL Server baik dengan dan tanpa server tertaut, lihat:
http://www.sommarskog.se/error_handling/Part1.html