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:
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 liknandeSELECT Id FROM ( SELECT Id FROM T_B ) T_B;
gör det inte arbete.
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.