2010-07-29 17 views
2

Comment puis-je récupérer les champs dans un champ XML dans MS SQL?Comment puis-je sélectionner des tags à partir d'une requête SQL XML?

Chaque requête que j'essaie ne fonctionne pas comme prévu chaque fois que j'utilise ce code XML: Je veux sélectionner la valeur AccNumber.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Header> 
    <AuthSoapHd xmlns="https://temp.uri.com/Mngmt/"> 
     <System>System1</System> 
    </AuthSoapHd> 
    </soap:Header> 
    <soap:Body> 
    <PrintList xmlns="https://temp.uri.com/Mngmt/"> 
     <Account> 
     <AccNumber xmlns="https://temp.uri.com/Project/Object/Data">990368644</AccNumber> 
     </Account> 
    </PrintList> 
    </soap:Body> 
</soap:Envelope> 

J'ai essayé plusieurs varations de ce qui suit sans sucess

Select [RequestXML].query('/Envelope/Body/PrintList/Account/AccNumber') 
    FROM [dbo].[Table1] 
+0

Avez-vous essayé d'envelopper l'enveloppe et le corps avec du savon:? – Fosco

Répondre

4

Vous ne tenez pas compte de l'espace de noms XML qui est en jeu - vous devez faire attention à cela!

WITH XMLNAMESPACES('http://schemas.xmlsoap.org/soap/envelope/' AS soap, 
        'https://temp.uri.com/Project/Object/Data' AS data, 
        'https://temp.uri.com/Mngmt/' AS mgmt) 

SELECT 
    RequestXML.value('(/soap:Envelope/soap:Body/mgmt:PrintList/mgmt:Account/data:AccNumber)[1]', 
        'BIGINT') AS 'AccNumber' 
FROM 
    [dbo].[Table1] 

Cela fonctionne avec un peu de chance!

+0

Merci Marc_S! C'était parfait! Aucune modification nécessaire était sur place. – Nic