[英]Biztalk: Nested Flat File Schema
我希望該架構看起來像:
<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記錄得到一條DETAIL記錄(PERSON重復),或者每條PERSON記錄得到所有DETAIL記錄(ID不再匹配)。
使用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>
如果您嘗試此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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.