2010-06-15 7 views
0

Мы только что перешли на синонимы связанного материала сервера и заметили, что наш выход FOR XML больше не верен. Когда вы возвращаете результаты XML из представления, мы могли бы псевдоним представления, и это было бы назначено как имя элемента. С синонимами, однако, это, кажется, игнорирует псевдоним? Мы по-прежнему в основном на SQL 2005 - эта ошибка, похоже, не происходит в нашем экземпляре 2008 года. Это известная проблема и любые идеи для работы?Использование FOR XML AUTO против синонима

Например, это то, что мы использовали, чтобы быть в состоянии сделать:

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"/> ...)

ответ

1

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

SELECT TOP 3 number 
FROM Numbers_synonym 
FOR XML PATH('elementname'), TYPE 
+0

Я не работаю в этой компании (этот вопрос составляет 7 месяцев), поэтому я не могу проверить его напрямую. Как вы используете XML PATH() с выбором нескольких таблиц (например: два внутренних объединенных синонима)? При использовании псевдонимов, псевдонимы используются как имена вложенных элементов. Как XML PATH разрешает, какой путь применить к синониму? – Rick

+1

@Rick Зависит от вашего запроса - вы могли бы использовать коррелированный запрос с предложением 'FOR XML PATH', что позволило бы это сделать. –