[英]Using TSQL to generate XML
我試圖使用TSQL生成一些XML,但遇到了一些麻煩,我能夠遍歷2個級別,但陷入了3級。在我已發布的示例中,您必須購買“采購訂單”(僅第一個采購訂單)時,它應該如何工作?有一個部分,該部分有一個版本。 第二個采購訂單分為兩個部分,每個部分都有自己的發布。 最后,我應該有2個遍歷3個級別(發行/零件/購買順序)的XML文檔。 我認為在鏈接到下一個階段以及分組依據時會感到困惑。該示例僅顯示2個部分,但一個采購訂單可以包含許多部分,但每個部分只有一個版本,任何幫助將不勝感激。
DECLARE @sdv AS TABLE
(
PID INT IDENTITY(1,1) PRIMARY KEY,
PurchaseOrder varchar(20),
PartNo int,
Release int
)
INSERT INTO @sdv values ('PURC123', 111, 1)
INSERT INTO @sdv values ('PURC333', 222, 1)
INSERT INTO @sdv values ('PURC333', 333, 1)
select
PurchaseOrder,
(
select
PartNo,
(
select
Release
from
@sdv a3
where
a3.Release = a2.Release and
a3.PartNo = a2.PartNo and
a3.PurchaseOrder = a1.PurchaseOrder
for xml path('Release'), type
)
from
@sdv a2
where
a2.PartNo = a1.PartNo
group by a2.PartNo
for xml path('part'), type
) from @sdv a1
group by PurchaseOrder
for xml path('Purchase')
我將向您射擊一個答案,以便您可以嘗試一下。 我今天待會兒更長,但明天再回來。
在本例中,我只是使用屬性,因為我可以更輕松地讀取它。 我使用CTE進行了分組,並假設零件與發行版之間的關系是一對多。 (在那里可能是錯誤的,但需要您提供信息)。 對於需要深入三分之一的水平也有些朦朧。 如果我們正在談論零件的迭代(版本),那么您可以簡單地在第二級添加@Release。 注意:如果您不希望使用屬性,只需在每個標記之前刪除@。
我強烈建議您在進行分層xml工作時非常注意您的代碼格式。 它很容易迷路。
碼
DECLARE @sdv AS TABLE
(
PID INT IDENTITY(1,1) PRIMARY KEY,
PurchaseOrder varchar(20),
PartNo int,
Release int
)
INSERT INTO @sdv values ('PURC123', 111, 1)
INSERT INTO @sdv values ('PURC333', 222, 1)
INSERT INTO @sdv values ('PURC333', 333, 1)
;WITH PO AS (
SELECT DISTINCT PurchaseOrder
FROM @sdv
)
SELECT L1.PurchaseOrder AS "@PurchseOrder",
( SELECT PartNo AS "@PartNo",
( SELECT DISTINCT L3.Release AS "@Release"
FROM @sdv AS L3
WHERE L2.PartNo = L3.PartNo
ORDER BY L3.Release ASC
FOR XML PATH('RELEASE'),TYPE
)
FROM @sdv AS L2
WHERE L2.PurchaseOrder = L1.PurchaseOrder
FOR XML PATH('PART'), TYPE
)
FROM PO AS L1
FOR XML PATH('PurchaseOrder'), ROOT('PurchaseOrders')
XML輸出
<PurchaseOrders>
<PurchaseOrder PurchseOrder="PURC123">
<PART PartNo="111">
<RELEASE Release="1" />
</PART>
</PurchaseOrder>
<PurchaseOrder PurchseOrder="PURC333">
<PART PartNo="222">
<RELEASE Release="1" />
</PART>
<PART PartNo="333">
<RELEASE Release="1" />
</PART>
</PurchaseOrder>
</PurchaseOrders>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.