Đây là một thiếu sót trong SQL Server. Chỉ sự tồn tại của một cột xml trên bảng ngăn nó tham gia vào các truy vấn phân tán (ví dụ:được truy vấn thông qua kết nối máy chủ được liên kết). Điều này được đề cập trong tài liệu 'đã nghỉ hưu' này. Dường như không có bất kỳ đề cập nào về điều này trong tài liệu của phiên bản hiện tại.
Đã từng có các báo cáo lỗi liên quan trên Microsoft Connect, nhưng báo cáo đó hiện đã được 'nghỉ hưu' để ủng hộ các diễn đàn phản hồi Azure. Mục phản hồi này được Đóng bằng hướng dẫn "Vui lòng gửi phản hồi trực tiếp từ tài liệu sản phẩm", điều này sẽ ổn nếu tài liệu sản phẩm thực sự đề cập đến điều này. Mục phản hồi khác này bao gồm bình luận được di chuyển từ Connect và có trạng thái 'Không có kế hoạch'.
Một trong những báo cáo lỗi Connect từng tồn tại đã đưa ra hai cách giải quyết:
-
Tạo chế độ xem [a] mà không có (các) cột XML trên máy chủ từ xa và truy vấn.
Trong ví dụ của bạn, điều này sẽ liên quan đến việc thêm một chế độ xem vào
MyDatabase
trông như thế này:CREATE VIEW V_T_B AS SELECT Id FROM T_B;
Sau đó, bạn có thể truy vấn chế độ xem này thông qua liên kết để lấy
Id
dữ liệu. Lưu ý rằng một cái gì đó nhưSELECT Id FROM ( SELECT Id FROM T_B ) T_B;
không làm việc.
-
Sử dụng truy vấn chuyển qua trong biểu mẫu
SELECT * from OPENQUERY (... )
Phương pháp này có ưu điểm là không yêu cầu bất kỳ thay đổi nào đối với cơ sở dữ liệu nguồn; nhược điểm là không còn có thể sử dụng cách đặt tên bốn phần tiêu chuẩn cho cả dữ liệu cục bộ và dữ liệu được liên kết. Truy vấn trông giống như
SELECT Id FROM OPENQUERY(DATA02, 'SELECT Id FROM T_B') T_B;
Lưu ý rằng nếu bạn thực sự làm muốn có dữ liệu xml, thì phương thức này (cùng với truyền đến và từ một kiểu dữ liệu không phải xml) sẽ được yêu cầu :
SELECT Id, CAST(Stuff AS XML) Stuff FROM OPENQUERY(DATA02, 'SELECT Id, CAST(Stuff AS nvarchar(max)) Stuff FROM T_B') T_B;
Lưu ý rằng lỗi được báo cáo lần đầu tiên trong SQL Server 2005 và vẫn chưa được sửa trong SQL Server 2017. Tôi chưa thể kiểm tra SQL Server 2019.