sql >> Databáze >  >> RDS >> Sqlserver

Proč se při dotazu na propojený server na data jiná než xml zobrazí chyba, že typ dat XML není podporován v distribuovaných dotazech?

Toto je nedostatek v SQL Serveru. Pouhá existence xml sloupce v tabulce brání tomu, aby se účastnila distribuovaných dotazů (např. dotazů přes propojené připojení k serveru). To je zmíněno v této „vyřazené“ dokumentaci. Zdá se, že v dokumentaci aktuální verze o tom není žádná zmínka.

Dříve existovaly relevantní zprávy o chybách na Microsoft Connect, ale to je nyní „vyřazeno“ ve prospěch fór pro zpětnou vazbu Azure. Tato položka zpětné vazby je uzavřena instrukcí „Odešlete zpětnou vazbu přímo z dokumentace k produktu“, což by bylo v pořádku, kdyby to dokumentace k produktu skutečně zmiňovala. Tato další položka zpětné vazby zahrnuje komentář migrovaný z Connectu a má stav 'Neplánováno'.

Jedna z chybových zpráv Connect, která dříve existovala, poskytla dvě řešení:

  1. Vytvořte [a] pohled bez sloupců XML na vzdáleném serveru a dotazujte se.

    Ve vašem příkladu by to zahrnovalo přidání pohledu do MyDatabase vypadá to takto:

    CREATE VIEW V_T_B AS SELECT Id FROM T_B;
    

    Poté můžete pomocí odkazu zadat dotaz na tento pohled a získat Id data. Všimněte si, že něco jako

    SELECT Id FROM ( SELECT Id FROM T_B ) T_B;
    

    není práce.

  2. Použijte předávací dotaz ve formuláři

    SELECT * from OPENQUERY (... )
    

    Tato metoda má tu výhodu, že nevyžaduje žádnou změnu ve zdrojové databázi; Nevýhodou je, že již není možné používat standardní čtyřdílné pojmenování pro lokální i propojená data. Dotaz by vypadal takto

     SELECT Id FROM OPENQUERY(DATA02, 'SELECT Id FROM T_B') T_B;
    

    Všimněte si, že pokud skutečně děláte chcete xml data, bude tato metoda (spolu s přetypováním do a z jiného než xml datového typu) vyžadována :

     SELECT Id, CAST(Stuff AS XML) Stuff 
     FROM OPENQUERY(DATA02, 'SELECT Id, CAST(Stuff AS nvarchar(max)) Stuff 
                             FROM T_B') T_B;
    

Všimněte si, že chyba byla poprvé hlášena v SQL Server 2005 a zůstává neopravena v SQL Server 2017. Dosud jsem nebyl schopen zkontrolovat SQL Server 2019.



  1. 5 jednoduchých kroků, jak začít s MariaDB a Tableau

  2. Dotaz na data z XML

  3. Výzvy škálování databáze MySQL Moodle

  4. SQL SELECT MIN