Использование для XML AUTO против синоним
-
27-09-2019 - |
Вопрос
Мы только что переключились на синонимы для связанного сервера, и заметили, что наш для вывода 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"/>
...)
Решение
Иногда FOR XML AUTO
Есть ли «неправильная вещь» - вы можете управлять именем элемента XML, если вы используете фракционно более Verbose:
SELECT TOP 3 number
FROM Numbers_synonym
FOR XML PATH('elementname'), TYPE