Il s'agit d'une lacune dans SQL Server. La simple existence d'une colonne xml sur la table l'empêche de participer à des requêtes distribuées (par exemple, être interrogé via une connexion à un serveur lié). Ceci est mentionné dans cette documentation « retirée ». Il ne semble pas en être fait mention dans la documentation de la version actuelle.
Auparavant, il y avait des rapports de bogues pertinents sur Microsoft Connect, mais ils ont maintenant été « retirés » au profit des forums de commentaires Azure. Cet élément de commentaires est fermé avec une instruction "Veuillez soumettre vos commentaires directement à partir de la documentation du produit", ce qui serait bien si la documentation du produit le mentionnait réellement. Cet autre élément de commentaire inclut des commentaires migrés depuis Connect et a le statut "Non planifié".
L'un des rapports de bogues Connect qui existaient auparavant proposait deux solutions de contournement :
Créez [une] vue sans la ou les colonnes XML sur le serveur distant et interrogez-la.
Dans votre exemple, cela impliquerait d'ajouter une vue à
MyDatabase
ça ressemble à ça :CREATE VIEW V_T_B AS SELECT Id FROM T_B;
Vous pouvez ensuite interroger cette vue via le lien pour obtenir l'
Id
Les données. Notez que quelque chose commeSELECT Id FROM ( SELECT Id FROM T_B ) T_B;
pas travail.
Utiliser une requête directe dans le formulaire
SELECT * from OPENQUERY (... )
Cette méthode présente l'avantage de ne nécessiter aucune modification de la base de données source; l'inconvénient est qu'il n'est plus possible d'utiliser la dénomination standard en quatre parties pour les données locales et liées. La requête ressemblerait à
SELECT Id FROM OPENQUERY(DATA02, 'SELECT Id FROM T_B') T_B;
Notez que si vous faites voulez les données xml, cette méthode (ainsi que la conversion vers et depuis un type de données non-xml) sera requise :
SELECT Id, CAST(Stuff AS XML) Stuff FROM OPENQUERY(DATA02, 'SELECT Id, CAST(Stuff AS nvarchar(max)) Stuff FROM T_B') T_B;
Notez que le bogue a été signalé pour la première fois dans SQL Server 2005 et reste non corrigé dans SQL Server 2017. Je n'ai pas encore pu vérifier SQL Server 2019.