mssql косяк с выводом в xml
От: bastrakov Россия http://bastrakof.livejournal.com/
Дата: 07.08.13 10:44
Оценка:
привет всем.

сорри, копипаст из жж. наткнулся на интересную багофичу в mssql-2008.

если спросить его так:
select 1 as a FOR XML path('tableRow');
то он вернет вполне ожидаемое:
<tableRow><a>1</a></tableRow>

а если спросить так:
select 1 as a, 2 as a FOR XML path('tableRow')
то тут будет совершенно неожиданное:
<tableRow><a>12</a></tableRow>

т.е. этот умник, обьединил пару разных полей, потому что они имели одинаковые названия в запросе. во
Re: mssql косяк с выводом в xml
От: Olaf Россия  
Дата: 07.08.13 11:02
Оценка:
Здравствуйте, bastrakov, Вы писали:

B>т.е. этот умник, обьединил пару разных полей, потому что они имели одинаковые названия в запросе. во


В 2012 это поведение осталось, причем объединение значений происходит, когда колонки с одинаковыми именами идут друг за другом. В следующих примерах результат предсказуем…
select 1 as a, '', 2 as a for xml path('tableRow')
select 1 as a, 3 as c, 2 as a for xml path('tableRow')
Re: mssql косяк с выводом в xml
От: vmpire Россия  
Дата: 07.08.13 12:27
Оценка: 66 (2) +1
Здравствуйте, bastrakov, Вы писали:

B>если спросить его так:

B>select 1 as a FOR XML path('tableRow');
B>то он вернет вполне ожидаемое:
B><tableRow><a>1</a></tableRow>

B>а если спросить так:

B>select 1 as a, 2 as a FOR XML path('tableRow')
B>то тут будет совершенно неожиданное:
B><tableRow><a>12</a></tableRow>

B>т.е. этот умник, обьединил пару разных полей, потому что они имели одинаковые названия в запросе. во

Не косяк, всё работает так, как в документации:
If several subsequent columns share the same path prefix, they are grouped together under the same name.
Отсюда

Если колонки с одинаковыми именами не слкдуют друг за другом, они не группируются:

select 1 as a, 2 as b, 3 as a FOR XML path('tableRow')
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.