ОБНОВЛЕНИЕ: я обнаружил, что для этой проблемы поднят элемент Microsoft Connect здесь
При использовании FOR XML PATH
и WITH XMLNAMESPACES
для объявления пространства имен по умолчанию, я получу дублирование декларации пространства имен в любых узлах верхнего уровня для вложенных запросов, использующих FOR XML, я наткнулся на несколько решений онлайн, но я ' я не совсем убежден...
Вот полный пример
/*
drop table t1
drop table t2
*/
create table t1 ( c1 int, c2 varchar(50))
create table t2 ( c1 int, c2 int, c3 varchar(50))
insert t1 values
(1, 'Mouse'),
(2, 'Chicken'),
(3, 'Snake');
insert t2 values
(1, 1, 'Front Right'),
(2, 1, 'Front Left'),
(3, 1, 'Back Right'),
(4, 1, 'Back Left'),
(5, 2, 'Right'),
(6, 2, 'Left')
;with XmlNamespaces( default 'uri:animal')
select
a.c2 as "@species"
, (select l.c3 as "text()"
from t2 l where l.c2 = a.c1
for xml path('leg'), type) as "legs"
from t1 a
for xml path('animal'), root('zoo')
Какое лучшее решение?