Привет. Я пытаюсь заставить свою БД выводить XML, и у меня это получается.
Когда я делаю стандартный выбор с различными объединениями и т. Д., И все работает нормально, я добавляю следующую строку:
for xml auto, root('MyRoot')
Это сгенерировало необходимый XML
Однако, когда я использую приведение или преобразование в select, один из моих тегов объединяется с его родителем, и я не понимаю, почему или как это исправить. Все остальное идеально.
Ниже приведен код, который выводит XML так, как я хочу
select Tbl1.id,
'xyz ' as [randCol],
Tbl2.id,
Tbl2.name,
aDate as [date] --(aDate is the date field, date here is not data type, but a colum name for output)
from dbo.table1 as Tbl1
inner join dbo.table3 as Tbl3
on Tbl1.id = Tbl3.table1id
inner join table2 as Tbl2
on Tbl3.table2id = Tbl2.id
where Tbl1.id = 1
for xml auto, root('MyRoot')
Итак, итоговый XML выглядит так:
<MyRoot>
<Tbl1 id="1" randCol="xyz ">
<Tbl2 id="10001" name="John">
<Tbl3 date="2011-10-19T22:59:00" />
</Tbl2>
<Tbl2 id="10002" name="Brian">
<Tbl3 date="2011-10-19T22:59:00" />
</Tbl2>
<Tbl2 id="10003" name="Jimmy">
<Tbl3 date="2011-05-19T23:00:00" />
</Tbl2>
</Tbl1>
</MyRoot>
Проблема в том, что когда я заменяю строку «aDate as date» следующей строкой для форматирования даты, в которой мой XML испорчен.
CONVERT(date,aDate) as [date]
Это приводит к следующему выводу:
<MyRoot>
<Tbl1 id="1" randCol="xyz ">
<Tbl2 id="10001" name="dave" date="2010-11-17" />
<Tbl2 id="10002" name="harry" date="2010-11-16" />
<Tbl2 id="10003" name="lenny" date="2010-06-15" />
</Tbl1>
</MyRoot>
Что вызвало это изменение и что я должен сделать, чтобы отформатировать дату так, как я хочу, и сохранить ее на отдельной строке, как в первом примере.
EDIT2: ниже приведена ERD для db (я удалил объяснение erd и просто поместил erd. Также с некоторыми примерами данных: Ниже приведен набор данных, который я хочу в моем xml.
id randCol id name date
1 xyz 10001 John 2011-10-19
1 xyz 10002 Brian 2011-10-19
1 xyz 10003 Jimmy 2011-05-19
полный набор данных с select * покажет следующее: (для объяснения объединений).
id table1id table2id aDate id name
1 1 10001 2011-10-19 22:59:00 10001 John
1 1 10002 2011-10-19 22:59:00 10002 Brian
1 1 10003 2011-05-19 23:00:00 10003 Jimmy
![enter image description here](https://i.stack.imgur.com/K9z4o.jpg)
Я пытаюсь получить вывод XML в следующем формате.
<MyRoot>
<Tbl1 id="1" randCol="xyz ">
<Tbl2 id="10001" name="John">
<Tbl3 date="2011-10-19" />
</Tbl2>
<Tbl2 id="10002" name="Brian">
<Tbl3 date="2011-10-19" />
</Tbl2>
<Tbl2 id="10003" name="Jimmy">
<Tbl3 date="2011-05-19" />
</Tbl2>
</Tbl1>
</MyRoot>
Однако мне нужно добиться этого без использования Explisit, поэтому нужно знать, следует ли мне использовать Raw, Auto или Path и с какой комбинацией параметров.