I have these two tables that I wish to create a nested XML schema out of
我希望架构看起来像:
<PERSON ID="1" FN="F1" LN="L1">
<DETAIL ID="1" NUM="11"/>
<DETAIL ID="1" NUM="12"/>
</PERSON>
<PERSON ID="2" FN="F2" LN="L2">
<DETAIL ID="1" NUM="21"/>
<DETAIL ID="1" NUM="22"/>
<DETAIL ID="1" NUM="23"/>
</PERSON>
我调用一些SQL来从表中获取数据。 我尝试过的一种方法是在“ID”字段上使用内部联接,另一种方法是使用存储过程返回两组数据,每个表一个。我在两个方面遇到的问题是如何将其映射到上述结构?
我最终获得每条PERSON记录一条详细记录(PERSON重复) 或者我获得每个PERSON记录的所有详细记录(ID不再匹配)。
答案 0 :(得分:1)
使用FOR XML AUTO:
SELECT PERSON.ID, PERSON.FN, PERSON.LN, DETAIL.ID, DETAIL.NUM
FROM PERSON
JOIN DETAIL ON PERSON.ID = DETAIL.ID
FOR XML AUTO
使用FOR XML PATH:
SELECT p.ID '@ID', p.FN '@FN', p.LN '@LN',
(
SELECT d.ID '@ID', d.NUM '@NUM'
FROM DETAIL d
WHERE p.ID = d.ID
FOR XML PATH('DETAIL'), TYPE
)
FROM PERSON p
FOR XML PATH('PERSON')
两者都会产生这个:
<PERSON ID="1" FN="F1" LN="L1">
<DETAIL ID="1" NUM="11" />
<DETAIL ID="1" NUM="12" />
</PERSON>
<PERSON ID="2" FN="F2" LN="L2">
<DETAIL ID="2" NUM="21" />
<DETAIL ID="2" NUM="22" />
<DETAIL ID="2" NUM="23" />
</PERSON>
答案 1 :(得分:0)
如果你试试这个sql:
SELECT
ID AS '@ID',
FN AS '@FN',
LN AS '@LN',
(
SELECT ID AS '@ID', NUM AS '@NUM' FROM Table_2 WHERE table_2.ID = dbo.Table_1.ID FOR XML PATH('DETAIL') ,TYPE
) AS 'details'
FROM dbo.Table_1
FOR XML PATH('PERSON')
您将获得如下所示的一些xml内容:
<PERSON ID="1" FN="F1" LN="L1">
<details>
<DETAIL ID="1" NUM="11" />
<DETAIL ID="1" NUM="12" />
</details>
</PERSON>
<PERSON ID="2" FN="F2" LN="L2">
<details>
<DETAIL ID="2" NUM="21" />
<DETAIL ID="2" NUM="22" />
<DETAIL ID="2" NUM="23" />
</details>
</PERSON>