sql >> Base de Datos >  >> RDS >> Sqlserver

¿Por qué aparece el error El tipo de datos Xml no es compatible con las consultas distribuidas cuando consulto un servidor vinculado en busca de datos que no sean XML?

Esta es una deficiencia dentro de SQL Server. La mera existencia de una columna xml en la tabla evita que participe en consultas distribuidas (por ejemplo, ser consultado a través de una conexión de servidor vinculado). Esto se menciona en esta documentación 'retirada'. No parece haber ninguna mención de esto en la documentación de la versión actual.

Solía ​​haber informes de errores relevantes en Microsoft Connect, pero ahora se ha "retirado" a favor de los foros de comentarios de Azure. Este elemento de comentarios se cierra con una instrucción para "Envíe sus comentarios directamente desde la documentación del producto", lo cual estaría bien si la documentación del producto realmente mencionara esto. Este otro elemento de comentarios incluye comentarios migrados de Connect y tiene el estado 'No planificado'.

Uno de los informes de errores de Connect que solía existir ofrecía dos soluciones:

  1. Cree [una] vista sin la(s) columna(s) XML en el servidor remoto y consulte eso.

    En su ejemplo, esto implicaría agregar una vista a MyDatabase que se ve así:

    CREATE VIEW V_T_B AS SELECT Id FROM T_B;
    

    A continuación, puede consultar esta vista a través del enlace para obtener el Id datos. Tenga en cuenta que algo como

    SELECT Id FROM ( SELECT Id FROM T_B ) T_B;
    

    no trabajo.

  2. Utilice una consulta de transferencia en el formulario

    SELECT * from OPENQUERY (... )
    

    Este método tiene la ventaja de no requerir ningún cambio en la base de datos de origen; la desventaja es que ya no es posible usar nombres estándar de cuatro partes para datos locales y vinculados. La consulta se vería como

     SELECT Id FROM OPENQUERY(DATA02, 'SELECT Id FROM T_B') T_B;
    

    Tenga en cuenta que si realmente hace desea los datos xml, este método (junto con la conversión hacia y desde un tipo de datos que no es xml) será requerido :

     SELECT Id, CAST(Stuff AS XML) Stuff 
     FROM OPENQUERY(DATA02, 'SELECT Id, CAST(Stuff AS nvarchar(max)) Stuff 
                             FROM T_B') T_B;
    

Tenga en cuenta que el error se informó por primera vez en SQL Server 2005 y permanece sin corregir en SQL Server 2017. Todavía no he podido verificar SQL Server 2019.