привет всем.
сорри, копипаст из жж. наткнулся на интересную багофичу в 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>
т.е. этот умник, обьединил пару разных полей, потому что они имели одинаковые названия в запросе. во
Здравствуйте, 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')
Здравствуйте, 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')