Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Perché viene visualizzato l'errore Il tipo di dati XML non è supportato nelle query distribuite quando si interroga un server collegato per dati non XML?

Questa è una carenza all'interno di SQL Server. La semplice esistenza di una colonna xml sulla tabella gli impedisce di partecipare a query distribuite (ad es. essere interrogata tramite una connessione al server collegata). Questo è menzionato in questa documentazione "in pensione". Non sembra esserci alcuna menzione di questo nella documentazione della versione corrente.

C'erano segnalazioni di bug rilevanti su Microsoft Connect, ma ora sono state "ritirate" a favore dei forum di feedback di Azure. Questo elemento di feedback viene chiuso con un'istruzione "Invia feedback direttamente dalla documentazione del prodotto", il che andrebbe bene se la documentazione del prodotto lo menzionasse effettivamente. Questo altro elemento di feedback include i commenti migrati da Connect e ha lo stato "Non pianificato".

Una delle segnalazioni di bug di Connect che esisteva un tempo forniva due soluzioni alternative:

  1. Crea [a] vista senza le colonne XML sul server remoto ed esegui una query.

    Nel tuo esempio, ciò comporterebbe l'aggiunta di una vista a MyDatabase assomiglia a questo:

    CREATE VIEW V_T_B AS SELECT Id FROM T_B;
    

    Puoi quindi interrogare questa vista tramite il link per ottenere l'Id dati. Nota che qualcosa come

    SELECT Id FROM ( SELECT Id FROM T_B ) T_B;
    

    non lavoro.

  2. Utilizza una query pass-through nel modulo

    SELECT * from OPENQUERY (... )
    

    Questo metodo ha il vantaggio di non richiedere alcuna modifica al database di origine; lo svantaggio è che non è più possibile utilizzare la denominazione standard in quattro parti sia per i dati locali che per quelli collegati. La query sarebbe simile a

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

    Nota che se effettivamente lo fai se desideri i dati xml, questo metodo (insieme al cast da e verso un tipo di dati non XML) sarà richiesto :

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

Tieni presente che il bug è stato segnalato per la prima volta in SQL Server 2005 e non è stato risolto in SQL Server 2017. Non sono ancora stato in grado di controllare SQL Server 2019.