2010-03-01 14 views
3

Excuses si cela est répondu ailleurs. Je continue à recevoir le message d'erreur XQuery [Mytable.XMLData.nodes()]: Il n'y a pas d'élément nommé 'réponse'Comment obtenir SQL Server XQUERY pour renvoyer autre chose que "Il n'y a aucun élément nommé [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> 

J'ai essayé plusieurs variations différentes sur l'obtention le nœud racine (« réponse »), ou l'un des nœuds enfants si, mais je changer ma déclaration pour lire

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

i obtenir le résultat testtest2010-02-16T08: 59: 59

je voudrais en fin de compte comme ces données sous forme de tableau, quelque chose comme

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) 

Merci pour votre aide

+0

Peut-être d'intérêt: http://stackoverflow.com/questions/1302064/sql-server-2005-xml-query-works-value-requires-singleton-found-xdtuntype –

+0

oui cela aide un peu. Semble quand je supprime la déclaration d'espace de noms sur le nœud racine, je peux maintenant trouver mes éléments. Cependant, aucun de mes éléments n'a de préfixe d'espace de noms explicite (par exemple, blah) Devrait-il? Je suppose que je peux simplement supprimer cette ligne xmlns = "http://TempNameSpace.com/AnswerData.xsd" de mon xml, mais je prévoyais d'utiliser cela pour valider le xml Merci – Beta033

+0

OOPS !!! @Myself: Faites plutôt attention à la partie (/) [1]. qui aide – Beta033

Répondre

4

Vous n'êtes pas prêter attention à la espace de noms XML en jeu:

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

Vous devez en tenir compte lors de l'interrogation - faire quelque chose comme ceci:

;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) 

Vous devez référencer tout à l'intérieur <Answer> avec le préfixe d'espace de noms XML ns:.

+0

Aha !!! Merci et OMG Ponies pour la réponse. /moi est encore nouveau – Beta033