これはSQLServerの欠陥です。単なる存在 テーブルにxml列があると、分散クエリに参加できなくなります(たとえば、リンクサーバー接続を介してクエリが実行されます)。これは、この「廃止された」ドキュメントに記載されています。現在のバージョンのドキュメントには、これについての言及はないようです。
以前はMicrosoftConnectに関連するバグレポートがありましたが、Azureフィードバックフォーラムを支持して「廃止」されました。このフィードバック項目は、「製品ドキュメントから直接フィードバックを送信してください」という指示で締めくくられています。これは、製品ドキュメントに実際に記載されている場合は問題ありません。この他のフィードバック項目には、Connectから移行されたコメントが含まれ、ステータスは「計画外」です。
以前は存在していたConnectバグレポートの1つに、2つの回避策がありました。
-
リモートサーバー上にXML列なしで[a]ビューを作成し、それをクエリします。
あなたの例では、これには
MyDatabase
へのビューの追加が含まれます これは次のようになります:CREATE VIEW V_T_B AS SELECT Id FROM T_B;
次に、リンクを介してこのビューをクエリし、
のようなものに注意してくださいId
を取得できます。 データ。SELECT Id FROM ( SELECT Id FROM T_B ) T_B;
しません 仕事。
-
フォームでパススルークエリを使用する
SELECT * from OPENQUERY (... )
この方法には、ソースデータベースに変更を加える必要がないという利点があります。欠点は、ローカルデータとリンクトデータの両方に標準の4部構成の命名を使用できなくなったことです。クエリは次のようになります
SELECT Id FROM OPENQUERY(DATA02, 'SELECT Id FROM T_B') T_B;
実際に行う場合は注意してください xmlデータが必要な場合は、このメソッド(および非xmlデータ型との間のキャスト)が必須になります。 :
SELECT Id, CAST(Stuff AS XML) Stuff FROM OPENQUERY(DATA02, 'SELECT Id, CAST(Stuff AS nvarchar(max)) Stuff FROM T_B') T_B;
このバグはSQLServer2005で最初に報告され、SQLServer2017では修正されていないことに注意してください。SQLServer2019をまだ確認できていません。