Dette er en mangel i SQL Server. Den blotte eksistens af en xml-kolonne på bordet forhindrer den i at deltage i distribuerede forespørgsler (f.eks. at blive forespurgt via en forbundet serverforbindelse). Dette er nævnt i denne 'pensionerede' dokumentation. Der ser ikke ud til at være nogen omtale af dette i den aktuelle versions dokumentation.
Der plejede at være relevante fejlrapporter på Microsoft Connect, men det er nu blevet 'pensioneret' til fordel for Azures feedbackfora. Denne feedback-vare er lukket med en instruktion om "Send venligst feedback direkte fra produktdokumentationen", hvilket ville være fint, hvis produktdokumentationen faktisk nævnte dette. Dette andet feedbackelement inkluderer kommentarer, der er migreret fra Connect, og har status 'Uplanlagt'.
En af de Connect-fejlrapporter, der plejede at eksistere, gav to løsninger:
Opret [en] visning uden XML-kolonnen(r) på fjernserveren, og forespørg på det.
I dit eksempel ville dette involvere tilføjelse af en visning til
MyDatabase
der ser sådan ud:CREATE VIEW V_T_B AS SELECT Id FROM T_B;
Du kan derefter forespørge på denne visning via linket for at få
Id
data. Bemærk, at noget lignendeSELECT Id FROM ( SELECT Id FROM T_B ) T_B;
ikke arbejde.
Brug en pass-through-forespørgsel i formularen
SELECT * from OPENQUERY (... )
Denne metode har den fordel, at den ikke kræver nogen ændring af kildedatabasen; Ulempen er, at det ikke længere er muligt at bruge standard firedelt navngivning for både lokale og linkede data. Forespørgslen ville se ud
SELECT Id FROM OPENQUERY(DATA02, 'SELECT Id FROM T_B') T_B;
Bemærk, at hvis du faktisk gør ønsker xml-dataene, vil denne metode (sammen med casting til og fra en ikke-xml-datatype) være påkrævet :
SELECT Id, CAST(Stuff AS XML) Stuff FROM OPENQUERY(DATA02, 'SELECT Id, CAST(Stuff AS nvarchar(max)) Stuff FROM T_B') T_B;
Bemærk, at fejlen først blev rapporteret i SQL Server 2005 og forbliver urettet i SQL Server 2017. Jeg har endnu ikke været i stand til at tjekke SQL Server 2019.