SQL Server cung cấp một TRY CATCH
cơ chế cho phép ứng dụng nhận ra rằng đã xảy ra sự cố và thực thi mã thích hợp để xử lý sự cố. Ví dụ:
BEGIN TRY <some code> END TRY BEGIN CATCH PRINT 'This is the error: ' + error_message() END CATCH
Mã trong TRY
khối được thực hiện đầu tiên. Nếu xảy ra lỗi, quá trình thực thi sẽ được chuyển tới CATCH
khối.
Ý nghĩa của việc xử lý lỗi là gì nếu bạn muốn sử dụng TRY CATCH
với một máy chủ được liên kết? Trong trường hợp này, lỗi có thể xảy ra trong:
- Phiên bản SQL Server cục bộ.
- Giao diện SQL Server được sử dụng để tạo điều kiện kết nối với máy chủ từ xa.
- Giao diện được sử dụng để làm cho máy chủ từ xa có thể truy cập được vào SQL Server.
Thiết lập ví dụ của chúng tôi sẽ sử dụng máy chủ Salesforce.com làm máy chủ từ xa. Đối với loại máy chủ từ xa này, giao diện 2. là Nhà cung cấp Microsoft OLE DB cho Trình điều khiển ODBC và giao diện 3. là trình điều khiển ODBC Salesforce.com của Easysoft.
Lỗi sau xảy ra cục bộ trong SQL Server. Máy chủ được liên kết có tên SALESFORCE
vẫn chưa được tạo và do đó SQL Server không thể định vị nó:
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.
Lỗi tiếp theo xảy ra trong lớp Microsoft OLE DB Provider cho ODBC Drivers. Máy chủ được liên kết có tên SALESFORCE
tham chiếu nguồn dữ liệu ODBC có chứa chi tiết kết nối cho máy chủ Salesforce.com mục tiêu. Tuy nhiên, SQL Server là 64-bit nhưng nguồn dữ liệu ODBC đã được thiết lập trong Quản trị viên ODBC 32-bit. Kết nối không thành công do lỗi "kiến trúc không khớp"
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".
Lưu ý rằng việc diễn giải lỗi OLE DB của SQL Server đã bị bắt bởi CATCH
khối. Lỗi "thô" đối với lớp OLEDB thì không.
Lỗi cuối cùng này xảy ra trong lớp ODBC được sử dụng để kết nối với Salesforce.com. Truy vấn chọn tham chiếu đến đối tượng Salesforce.com tùy chỉnh ("LEASE") chưa được kích hoạt và phổ biến. "[Easysoft ODBC] Không tìm thấy bảng cơ sở hoặc dạng xem LEASE" là lỗi từ trình điều khiển ODBC, được chuyển đến và hiển thị bởi Nhà cung cấp Microsoft OLE DB cho Trình điều khiển ODBC. Như trong ví dụ trước, thông báo này không thể theo dõi, diễn giải của SQL Server về thông báo có thể truy xuất được.
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".
Để biết thêm thông tin về việc xử lý lỗi SQL Server cả khi có và không có máy chủ được liên kết, hãy xem:
http://www.sommarskog.se/error_handling/Part1.html