簡體   English   中英

使用TSQL生成XML

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM