2010-03-01 45 views
3

的道歉,如果在其他地方回答了這個問題。我不斷收到錯誤消息 的XQuery [Mytable.XMLData.nodes()]:沒有名爲 '答案'如何讓SQL Server XQUERY返回除「沒有名爲[Element]的元素」

SELECT 
ref.value('/','nvarchar(1000)') 
FROM Mytable CROSS APPLY xmldata.nodes('Answer') R(ref) 

元素 -

--XML of Row 
<Answer xmlns="http://TempNameSpace.com/AnswerData.xsd" Type="Deliverable"> 
    <Deliverable> 
    <Title>test</Title> 
    <Description>test</Description> 
    <DueDate>2010-02-16T08:59:59</DueDate> 
    </Deliverable> 
</Answer> 

我試過在得到幾個不同的變化根節點(「答案」),或任何孩子的節點 但如果我改變我的發言看

SELECT 
ref.value('/','nvarchar(1000)') 
FROM Mytable CROSS APPLY xmldata.nodes('/') R(ref) 

我得到的結果 testtest2010-02-16T08:59:59

我想最終像這樣的數據以表格的形式,像

SELECT 
    ref.value('/Title','nvarchar(1000)') as Title 
    ref.value('/Description','nvarchar(1000)') as Description 

etc.. 
    FROM Mytable CROSS APPLY xmldata.nodes('/Deliverable') R(ref) 

感謝您的幫助

+0

可能是有趣的:http://stackoverflow.com/questions/1302064/sql-server-2005-xml-query-works-value-requires-singleton-found-xdtuntype – 2010-03-01 21:55:59

+0

是的,這確實有所幫助。似乎當我刪除根節點上的命名空間聲明,我現在可以找到我的元素。然而,我的元素都沒有明確的命名空間前綴(例如,等於) 應該嗎?我想我可以從我的XML中刪除此xmlns =「http://TempNameSpace.com/AnswerData.xsd」行,但我打算使用它來驗證xml 謝謝 – Beta033 2010-03-01 22:05:35

+0

OOPS !!! @我自己:請注意(/)[1]部分。 這有助於 – Beta033 2010-03-01 22:08:12

回答

4

你不注意的在遊戲中的XML命名空間:

<Answer xmlns="http://TempNameSpace.com/AnswerData.xsd" Type="Deliverable" 
     ********************************************** 

您需要查詢時考慮到這一點 - 做這樣的事情:

;WITH XMLNAMESPACES('http://TempNameSpace.com/AnswerData.xsd' AS ns) 
SELECT 
    ref.value('(ns:*)[1]', 'nvarchar(1000)') 
FROM Mytable 
CROSS APPLY xmldata.nodes('/ns:Answer') R(ref) 

您需要引用<Answer>中的所有內容以及ns: XML命名空間前綴。

+0

啊哈!!!使用'WITH XMLNAMESPACES(.....)'!謝謝你和OMG小馬的答案。 /我還是newb – Beta033 2010-03-01 22:17:53

相關問題