Ответ 1
Это недостаток в SQL Server. Простое существование столбца xml таблицы не позволяет ему участвовать в распределенных запросах (например, запрашивается через связанное соединение с сервером). Этот упоминается в документации, хотя и не особенно заметно. Вы можете увидеть основной отчет об ошибке подключения здесь и аналогичный отчет здесь. Последний дает два обхода:
-
Создайте представление [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;
не работает.
-
Использовать сквозной запрос в форме
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 2014.