Доброе утро всем,
У меня большой запрос, использующий FOR XML PATH для вывода XML-файла. У меня есть основной выбор, который в основном просто представляет корень, то есть
select *
from tbl
for xml path ('root'),elements xsinil
Затем у меня есть последующие вложенные выборки в этом главном выборе, т.е.
select
(
select null [level1],
'2' [level2]
from tbl
for xml path('nested1'),type
),
(
select null [level1],
'2' [level2]
from tbl
for xml path('nested2'),type
)
for xml path('root'),elements xsinil
Однако аргумент элемента xsinil, помещенный в путь for xml, не влияет на содержащиеся в нем подзапросы, т. Е. Элемент Level1 является просто закрытым тегом. Мне нужно, чтобы это отображалось как xsi: nil = "true".
Я могу добиться этого, добавив аргумент xsinil элементов в оператор пути for xml, например
for xml path('nested1'),type,elements xsinil
Проблема в том, что объявление пространства имен повторяется на уровне подзапроса.
Я могу найти множество примеров использования элементов xsinil, но ни одного, где это применимо к подзапросу без повторного объявления namesapce.
Для подтверждения я ищу следующий вывод:
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<nested1>
<level1 xsi:nil="true">
<level2>2</level2>
</nested1>
<nested2>
<level1 xsi:nil="true">
<level2>2</level2>
</nested2>
</root>
Надеюсь, вы можете помочь!