Vui lòng xem câu hỏi này trên stackoverflow:
Tôi đang sử dụng trình điều khiển EasySoft ODBC để liên kết phiên bản SQL Server 2008 R2 Express với Interbase và tôi gặp một số khó khăn khi nhận siêu dữ liệu từ máy chủ từ xa. Từ việc tìm kiếm trên mạng, tất cả các loại đường chính đều đề cập đến việc sử dụng OPENQUERY thay vì cú pháp máy chủ được liên kết bốn phần.
EG Cách tiếp cận hiện tại (có vấn đề) của tôi là ...
CREATE VIEW [LIVE].[vwPRDETS] AS SELECT * FROM [LBLIVE]...[PRDETS] WITH (NOLOCK)
Nhưng trên một số bảng tôi gặp lỗi khi gọi chế độ xem ...
Msg 7353, Cấp 16, Trạng thái 1, Dòng 1 Nhà cung cấp OLE DB "MSDASQL" cho máy chủ được liên kết "LBLIVE" cung cấp siêu dữ liệu không nhất quán. Một cột bổ sung đã được cung cấp trong quá trình thực thi không được tìm thấy tại thời điểm biên dịch.
Ngoài ra, một số chế độ xem tôi thậm chí không thể tạo vì tôi nhận được ...
Msg 7315, Cấp 16, Trạng thái 1, Dòng 1 Nhà cung cấp OLE DB "MSDASQL" cho máy chủ được liên kết "LBLIVE" chứa nhiều bảng khớp với tên "" SYSDBA "." AUDIT_LBABKP "".
Mặc dù chỉ có một trong các bảng được đề cập.
Cách tiếp cận khác từ tìm kiếm trên mạng dường như giống ...
SELECT * FROM OPENQUERY(<linked sevrer>, 'SELECT <column list> FROM MyTable')
Vì vậy, câu hỏi của tôi là, nếu tôi sử dụng OPENQUERY trong định nghĩa chế độ xem của mình, SQL Server có thể tối ưu hóa kết quả SQL được gửi đến Interbase không? Hay thực sự không có nhiều khác biệt giữa hai cách tiếp cận?
Đó là một chủ đề xuyên suốt và sẽ yêu POV của dba.