Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengapa saya mendapatkan kesalahan tipe data Xml tidak didukung dalam kueri terdistribusi saat menanyakan server tertaut untuk data non-xml?

Ini adalah kekurangan dalam SQL Server. Hanya keberadaan dari kolom xml pada tabel mencegahnya berpartisipasi dalam kueri terdistribusi (misalnya, ditanyakan melalui koneksi server tertaut). Ini disebutkan dalam dokumentasi 'pensiun' ini. Tampaknya tidak ada penyebutan ini dalam dokumentasi versi saat ini.

Dulu ada laporan bug yang relevan di Microsoft Connect, tetapi sekarang telah 'dipensiunkan' demi forum umpan balik Azure. Item umpan balik ini Ditutup dengan instruksi untuk "Silakan kirim umpan balik langsung dari dokumentasi produk", yang akan baik-baik saja jika dokumentasi produk benar-benar menyebutkan hal ini. Item umpan balik lainnya ini mencakup komentar yang dimigrasikan dari Connect, dan berstatus 'Tidak direncanakan'.

Salah satu laporan bug Connect yang dulu ada memberikan dua solusi:

  1. Buat tampilan [a] tanpa kolom XML di server jauh dan tanyakan itu.

    Dalam contoh Anda, ini akan melibatkan penambahan tampilan ke MyDatabase yang terlihat seperti ini:

    CREATE VIEW V_T_B AS SELECT Id FROM T_B;
    

    Anda kemudian dapat menanyakan tampilan ini melalui tautan untuk mendapatkan Id data. Perhatikan bahwa sesuatu seperti

    SELECT Id FROM ( SELECT Id FROM T_B ) T_B;
    

    tidak bekerja.

  2. Gunakan kueri pass-through dalam bentuk

    SELECT * from OPENQUERY (... )
    

    Metode ini memiliki keuntungan karena tidak memerlukan perubahan apa pun pada basis data sumber; kelemahannya adalah tidak mungkin lagi menggunakan penamaan empat bagian standar untuk data lokal dan data tertaut. Permintaan akan terlihat seperti

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

    Perhatikan bahwa jika Anda benar-benar melakukannya menginginkan data xml, metode ini (bersama dengan casting ke dan dari tipe data non-xml) akan diperlukan :

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

Perhatikan bahwa bug pertama kali dilaporkan di SQL Server 2005, dan tetap tidak diperbaiki di SQL Server 2017. Saya belum dapat memeriksa 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. Pelajari Tentang Cara Menggunakan SQL Server Management Studio

  2. Bagaimana cara membuat batasan unik yang juga memungkinkan nol?

  3. Cara Menghapus Spasi Leading dan Trailing di SQL Server – TRIM()

  4. Bagaimana cara menggunakan ROW_NUMBER()?

  5. Memetakan kunci komposit menggunakan kode EF terlebih dahulu