2013-03-03 29 views
1

我有一個表格單元格下面的XML,在列MyColumn:試圖使用SQL Server獲取所有xml節點,我做錯了什麼?

<BSDL xmlns="..." xmlns:i="..."> 
    <dateTime>2012-12-30T00:00:00Z</dateTime> 
    <dateTime>2013-01-07T00:00:00Z</dateTime> 
    <dateTime>2013-01-14T00:00:00Z</dateTime> 
    <dateTime>2013-01-21T00:00:00Z</dateTime> 
    <dateTime>2013-01-29T00:00:00Z</dateTime> 
    <dateTime>2013-02-05T00:00:00Z</dateTime> 
    <dateTime>2013-02-12T00:00:00Z</dateTime> 
    <dateTime>2013-02-19T00:00:00Z</dateTime> 
    <dateTime>2013-03-22T00:00:00Z</dateTime> 
    <dateTime>2013-03-29T00:00:00Z</dateTime> 
    <dateTime>2013-04-19T00:00:00Z</dateTime> 
</BSDL> 

我只是想查詢使用它(得到所有XML節點):

SELECT BSDL.item.value('(dateTime)[1]', 'datetime') 
    from [MyTable] 
    CROSS APPLY [MyColumn].nodes ('//BSDL') BSDL(item) 

它產生任何結果,儘管我的MyColumnMyTable具有與上面相同的條目數量,對於每一行。

回答

1

由於只有一個<BSDL>節點 - 您致電//BSDL選擇該單個節點,然後item.value('(dateTime)[1]', 'datetime')返回第一個<dateTime>孩子。

您需要將您的XQuery的改變(使用該xmlns=....命名空間中的樣品中提到這裏):

;WITH XMLNAMESPACES('.....' as ns) 
SELECT 
    item.value('.', 'datetime') 
from 
    dbo.MyTable 
CROSS APPLY 
    MyColumn.nodes ('/ns:BSDL/ns:dateTime') BSDL(item) 

你需要得到<BSDL>下的所有<dateTime>節點列表 - 那麼你會得到所有的他們,你可以檢查他們一個接一個。

+0

感謝您的幫助,但仍然沒有結果..我檢查了數據庫,表和列的名稱,以及內容一百萬次..沒有什麼似乎,但沒有錯誤,沒有結果 – 2013-03-03 12:13:57

+0

@OrenA:你是在你的示例中也提到一個'xmlns = .....' - 但是你沒有顯示** XML名稱空間是什麼。您還需要尊重該XML名稱空間 - 請參閱我的更新回覆 – 2013-03-03 13:26:51

+1

確實命名空間是問題所在。非常感謝! – 2013-03-03 14:13:05