Мы только что переключились на синонимы для связанных серверов и заметили, что наш вывод FOR XML больше не является правильным. При возврате XML-результатов из представления мы могли бы использовать псевдоним для представления, и это было бы назначено в качестве имени элемента. Однако с синонимами, кажется, игнорирует псевдоним? Мы по-прежнему в основном используем SQL 2005 — похоже, эта ошибка не возникает в нашем экземпляре 2008 года. Это известная проблема, и есть ли какие-нибудь идеи для обхода?
Например, вот что мы раньше могли делать:
select top 3 number from Numbers as elementname for xml auto
<elementname number="0"/><elementname number="1"/><elementname number="2"/>
А вот что происходит с синонимом:
select top 3 number from Numbers_synonym as elementname for xml auto
<dbo.Numbers number="0"/><dbo.Numbers number="1"/><dbo.Numbers number="2"/>
Как видите, SQL Server использует имя фактического объекта, на который ссылаются, вместо псевдонима. Это усугубляется для кросс-серверных запросов, потому что вы получаете имя из четырех частей вместо красивого псевдонима. (например: <rick_server.rick_database.dbo.Numbers number="0"/>
...)