sql >> Databasteknik >  >> RDS >> Sqlserver

Varför får jag felmeddelandet Xml-datatypen stöds inte i distribuerade frågor när jag frågar en länkad server för icke-xml-data?

Detta är en brist i SQL Server. Blotta existensen av en xml-kolumn i tabellen förhindrar den från att delta i distribuerade frågor (t.ex. att frågas via en länkad serveranslutning). Detta nämns i denna "pensionerade" dokumentation. Det verkar inte finnas något omnämnande om detta i den aktuella versionens dokumentation.

Tidigare fanns det relevanta felrapporter på Microsoft Connect, men det har nu "dragits tillbaka" till förmån för Azures feedbackforum. Denna feedbackpost stängs med en instruktion om att "Skicka feedback direkt från produktdokumentationen", vilket skulle vara bra om produktdokumentationen faktiskt nämnde detta. Det här andra feedbackobjektet inkluderar kommentarer som migrerats från Connect och har statusen "Oplanerad".

En av Connect-felrapporterna som fanns förut gav två lösningar:

  1. Skapa [en] vy utan XML-kolumnen(-erna) på fjärrservern och fråga den.

    I ditt exempel skulle detta innebära att du lägger till en vy till MyDatabase som ser ut så här:

    CREATE VIEW V_T_B AS SELECT Id FROM T_B;
    

    Du kan sedan fråga den här vyn via länken för att få Id data. Observera att något liknande

    SELECT Id FROM ( SELECT Id FROM T_B ) T_B;
    

    gör det inte arbete.

  2. Använd en genomkopplingsfråga i formuläret

    SELECT * from OPENQUERY (... )
    

    Denna metod har fördelen att den inte kräver någon ändring av källdatabasen; Nackdelen är att det inte längre är möjligt att använda standard fyrdelad namngivning för både lokal och länkad data. Frågan skulle se ut

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

    Observera att om du faktiskt gör vill ha xml-data, kommer denna metod (tillsammans med casting till och från en icke-xml-datatyp) att vara obligatorisk :

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

Observera att felet först rapporterades i SQL Server 2005 och förblir ofixat i SQL Server 2017. Jag har ännu inte kunnat kontrollera SQL Server 2019.



  1. Utför regex (ersätt) i en SQL-fråga

  2. SQL Server:Är det möjligt att infoga i två tabeller samtidigt?

  3. Skapa och konfigurera Oracle Linked Server i SQL Server

  4. LOCALTIME Exempel – MySQL