Dies ist ein Mangel in SQL Server. Die bloße Existenz einer XML-Spalte in der Tabelle verhindert, dass sie an verteilten Abfragen teilnimmt (z. B. wenn sie über eine Verbindungsserververbindung abgefragt wird). Dies wird in dieser „ausrangierten“ Dokumentation erwähnt. In der Dokumentation der aktuellen Version scheint dies nicht erwähnt zu werden.
Früher gab es relevante Fehlerberichte zu Microsoft Connect, aber das wurde jetzt zugunsten der Azure-Feedback-Foren „aufgegeben“. Dieses Feedback-Element wird mit der Anweisung "Bitte senden Sie Feedback direkt aus der Produktdokumentation" geschlossen, was in Ordnung wäre, wenn dies in der Produktdokumentation tatsächlich erwähnt würde. Dieses andere Feedback-Element enthält aus Connect migrierte Kommentare und hat den Status „Ungeplant“.
Einer der Connect-Fehlerberichte, die früher existierten, gab zwei Problemumgehungen:
Erstellen Sie [eine] Ansicht ohne die XML-Spalte(n) auf dem Remote-Server und fragen Sie diese ab.
In Ihrem Beispiel würde dies das Hinzufügen einer Ansicht zu
MyDatabase
beinhalten das sieht so aus:CREATE VIEW V_T_B AS SELECT Id FROM T_B;
Sie können diese Ansicht dann über den Link abfragen, um die
Id
zu erhalten Daten. Beachten Sie, dass etwas wieSELECT Id FROM ( SELECT Id FROM T_B ) T_B;
nicht Arbeit.
Verwenden Sie eine Pass-Through-Abfrage im Formular
SELECT * from OPENQUERY (... )
Diese Methode hat den Vorteil, dass keine Änderung an der Quelldatenbank erforderlich ist; Der Nachteil ist, dass es nicht mehr möglich ist, die standardmäßige vierteilige Benennung sowohl für lokale als auch für verknüpfte Daten zu verwenden. Die Abfrage würde so aussehen
SELECT Id FROM OPENQUERY(DATA02, 'SELECT Id FROM T_B') T_B;
Beachten Sie, dass, wenn Sie es tatsächlich tun die XML-Daten möchten, ist diese Methode (zusammen mit dem Casting zu und von einem Nicht-XML-Datentyp) erforderlich :
SELECT Id, CAST(Stuff AS XML) Stuff FROM OPENQUERY(DATA02, 'SELECT Id, CAST(Stuff AS nvarchar(max)) Stuff FROM T_B') T_B;
Beachten Sie, dass der Fehler erstmals in SQL Server 2005 gemeldet wurde und in SQL Server 2017 nicht behoben wurde. Ich konnte SQL Server 2019 noch nicht überprüfen.