Использование FOR XML AUTO против синонима

Мы только что переключились на синонимы для связанных серверов и заметили, что наш вывод 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"/>...)


person Rick    schedule 15.06.2010    source источник


Ответы (1)


Иногда FOR XML AUTO делает «неправильные вещи» — вы можете контролировать имя элемента XML, если используете немного более подробный:

SELECT TOP 3 number
FROM Numbers_synonym
FOR XML PATH('elementname'), TYPE
person Rowland Shaw    schedule 10.01.2011
comment
Я больше не работаю в этой компании (этому вопросу 7 месяцев), поэтому я не могу проверить это напрямую. Как бы вы использовали XML PATH() с выборкой из нескольких таблиц (например, два синонима с внутренним соединением)? В таблицах с псевдонимами псевдонимы используются как имена вложенных элементов. Как XML PATH разрешит, какой путь применить к какому синониму? - person Rick; 25.01.2011
comment
@Rick Зависит от вашего запроса - вы можете использовать коррелированный запрос с предложением FOR XML PATH, что позволит это сделать. - person Rowland Shaw; 25.01.2011