Рассмотрим следующий SQL:
;WITH XMLNAMESPACES(DEFAULT 'http://www.mynamespace.co.uk')
,CTE_DummyData AS (
select id=1
)
select TOP 1
[@ID]=1,
(select top 1 [@ID] = 1 FROM CTE_DummyData FOR XML PATH ('Child'), TYPE)
from CTE_DummyData
FOR XML PATH ('Parent')
Тай возвращает xml:
<Parent xmlns="http://www.mynamespace.co.uk" ID="1">
<Child xmlns="http://www.mynamespace.co.uk" ID="1" />
</Parent>
Мне нужно вернуть xml с объявлением xmlns только для корневого элемента. например:
<Parent xmlns="http://www.mynamespace.co.uk" ID="1">
<Child ID="1" />
</Parent>
Есть ли способ сделать это?
Примечание. Вышеприведенный SQL-код является экстремальным упрощением фактического кода, который создает сложный документ, поэтому изменение FOR XML PATH на самом деле не вариант, не требующий пары дней дополнительной работы. Для ясности на верхнем уровне весь документ должен иметь NS, а все дочерние должны быть без него.
[Child/@ID]
, он работает нормально, но для этого потребуется немного переосмыслить код (который я унаследовал) - person Jon Egerton   schedule 13.10.2011