2017-04-13 31 views
1

我覺得這應該是非常簡單的事情,但我似乎無法弄清楚。T-SQL將第二級XML節點分成多個行

鑑於以下XML:

<Responses> 
    <Response> 
    <ResponseId>1</ResponseId> 
    <DateCreated>2016-02-01T18:26:17Z</DateCreated> 
    <Detail> 
     ... 
    </Detail> 
    </Response> 
    <Response> 
    <ResponseId>2</ResponseId> 
    <DateCreated>2016-02-01T18:33:28Z</DateCreated> 
    <Detail> 
     ... 
    </Detail> 
    </Response> 
    <Response> 
    <ResponseId>3</ResponseId> 
    <DateCreated>2016-02-12T19:33:48Z</DateCreated> 
    <Detail> 
     ... 
    </Detail> 
    </Response> 
    <Response> 
    <ResponseId>4</ResponseId> 
    <DateCreated>2016-02-15T18:21:09Z</DateCreated> 
    <Detail> 
     ... 
    </Detail> 
    </Response> 
    <Response> 
    <ResponseId>5</ResponseId> 
    <DateCreated>2016-02-15T19:04:07Z</DateCreated> 
    <Detail> 
     ... 
    </Detail> 
    </Response> 
</Responses> 

我期待的結果如下圖所示: enter image description here

我能夠檢索每個節點的元素就好了(即ResponseId,dateCreated會,並詳細所致。在每行3列的五行中),但是我需要返回完整的響應節點xml。

目前,我能想到的唯一解決方案是在檢索ResponseId,DateCreated和Detail之後手動重新構建所需的結果,但對我來說這似乎是一個混亂且容易出錯的選項。

回答

1

您可以使用.nodes().query()

DECLARE @xml XML= 
N'<Responses> 
    <Response> 
    <ResponseId>1</ResponseId> 
    <DateCreated>2016-02-01T18:26:17Z</DateCreated> 
    <Detail> 
    </Detail> 
    </Response> 
    <Response> 
    <ResponseId>2</ResponseId> 
    <DateCreated>2016-02-01T18:33:28Z</DateCreated> 
    <Detail> 
    </Detail> 
    </Response> 
    <Response> 
    <ResponseId>3</ResponseId> 
    <DateCreated>2016-02-12T19:33:48Z</DateCreated> 
    <Detail> 
    </Detail> 
    </Response> 
    <Response> 
    <ResponseId>4</ResponseId> 
    <DateCreated>2016-02-15T18:21:09Z</DateCreated> 
    <Detail> 
    </Detail> 
    </Response> 
    <Response> 
    <ResponseId>5</ResponseId> 
    <DateCreated>2016-02-15T19:04:07Z</DateCreated> 
    <Detail> 
    </Detail> 
    </Response> 
</Responses>'; 

--The選擇

SELECT One.Resp.query(N'.') 
FROM @xml.nodes(N'/Responses/Response') AS One(Resp) 
+0

張貼了這個問題後不久,我找到了另一種解決方案,涉及的相關查詢,但這是_ **所以** _更優雅!我在SQL查詢中使用XML比較新,所以我仍然在學習XQuery語法。 – Eric