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:
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 sepertiSELECT Id FROM ( SELECT Id FROM T_B ) T_B;
tidak bekerja.
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.