sql >> データベース >  >> RDS >> Sqlserver

リンクサーバーに非xmlデータをクエリするときに、分散クエリでXmlデータ型がサポートされていないというエラーが表示されるのはなぜですか?

    これはSQLServerの欠陥です。単なる存在 テーブルにxml列があると、分散クエリに参加できなくなります(たとえば、リンクサーバー接続を介してクエリが実行されます)。これは、この「廃止された」ドキュメントに記載されています。現在のバージョンのドキュメントには、これについての言及はないようです。

    以前はMicrosoftConnectに関連するバグレポートがありましたが、Azureフィードバックフォーラムを支持して「廃止」されました。このフィードバック項目は、「製品ドキュメントから直接フィードバックを送信してください」という指示で締めくくられています。これは、製品ドキュメントに実際に記載されている場合は問題ありません。この他のフィードバック項目には、Connectから移行されたコメントが含まれ、ステータスは「計画外」です。

    以前は存在していたConnectバグレポートの1つに、2つの回避策がありました。

    1. リモートサーバー上に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;
      

      しません 仕事。

    2. フォームでパススルークエリを使用する

      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をまだ確認できていません。



    1. Oracleの別のユーザーにストアドプロシージャの権限を付与する

    2. 'where value in ...'句でパラメータを使用する方法は?

    3. SQL Server 2016:クエリ結果をCSVファイルに保存

    4. djangoテストアプリエラー-テストデータベースの作成中にエラーが発生しました:データベースの作成が許可されていません