Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо получавам грешката Типът данни Xml не се поддържа в разпределените заявки при запитване към свързан сървър за не-xml данни?

Това е недостатък в SQL Server. Самото съществуване на xml колона в таблицата не й позволява да участва в разпределени заявки (напр. да бъде запитана чрез свързана сървърна връзка). Това е споменато в тази „пенсионирана“ документация. Изглежда, че не се споменава това в документацията на текущата версия.

Преди имаше подходящи доклади за грешки в Microsoft Connect, но сега те бяха „оттеглени“ в полза на форумите за обратна връзка на Azure. Този елемент за обратна връзка е затворен с инструкция „Моля, изпратете обратна връзка директно от документацията на продукта“, което би било добре, ако документацията на продукта действително споменава това. Този друг елемент за обратна връзка включва коментар, мигриран от Connect, и има статус „Непланиран“.

Един от съществуващите доклади за грешки в Connect дава две решения:

  1. Създайте [a] изглед без XML колона(и) на отдалечен сървър и го потърсете.

    Във вашия пример това би включвало добавяне на изглед към 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 (... )
    

    Този метод има предимството, че не изисква промяна в изходната база данни; недостатъкът е, че вече не е възможно да се използва стандартно именуване от четири части както за локални, така и за свързани данни. Заявката би изглеждала така

     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;
    

Имайте предвид, че грешката беше съобщена за първи път в SQL Server 2005 и остава неотстранена в SQL Server 2017. Все още не съм успял да проверя SQL Server 2019.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Автоматично събиране на данни:файлове с бази данни и логически устройства в MS SQL Server

  2. Как да използвате ВСЕКИ / НЯКОЙ логически оператор в SQL Server - SQL Server / TSQL урок, част 127

  3. Преобразувайте номера на месеца във функция за име на месеца в SQL

  4. ВЪВЕТЕ СТОЙНОСТИ, КЪДЕТО НЕ СЪЩЕСТВУВА

  5. Как да преименувате база данни в SQL Server - SQL Server / TSQL урок, част 26