Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tại sao tôi gặp lỗi Kiểu dữ liệu Xml không được hỗ trợ trong các truy vấn phân tán khi truy vấn máy chủ được liên kết cho dữ liệu không phải xml?

Đâ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:

  1. 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.

  2. 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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thay đổi số thứ tự của tài khoản thư cơ sở dữ liệu trong cấu hình trong SQL Server (T-SQL)

  2. Làm cách nào để tạo ràng buộc kiểm tra nhiều bảng?

  3. Tìm tên cột thực của một bí danh được sử dụng trong một dạng xem?

  4. Sử dụng SolarWinds Serv-U trên Linux với Cơ sở dữ liệu xác thực máy chủ SQL

  5. Toán tử logic AND trong SQL Server là gì - Hướng dẫn sử dụng SQL Server / TSQL Phần 120