2010-11-18 4 views
3

La table stock ELMAH_Error utilise un champ nText pour stocker une entrée Error. J'ai trouvé cela en ajoutant un champ de type XML; puis en ajoutant ce nouveau champ à l'instruction INSERT du SPROC qui remplit le champ; Je pourrais mieux utiliser la sortie d'ELMAH.Champ XML de la requête ELMAH

Maintenant, je voudrais apprendre comment interroger des valeurs d'éléments spécifiques dans ce champ XML. Le document est structuré comme suit:

<error [...]> 
    <serverVariables> 
    <item name="ALL_HTTP"> 
     <value string="..." /> 
    </item> 
    <item name="ALL_RAW"> 
     <value string="..." /> 
    </item> 
    . 
    . 
    . 
    </serverVariables> 
</error> 

Je dois pouvoir interroger la valeur d'éléments spécifiques en dessous.

Je suis à la recherche un exemple de l'article 15seconds.com:

SELECT MyXml.value('(/root/product[@id="304"]/name)[1]', 'nvarchar(30)') 

et essaie de cartes ces valeurs à la structure de mon champ - mais ne peut pas. Par exemple.

select top 10 RealXML.value('(/error/serverVariables[@id="REMOTE_HOST"]/name)[0]', 'nvarchar(30)') 

où REMOTE_HOST est mis en forme:

<item name="REMOTE_HOST"> 
    <value string="55.55.55.55" /> 
</item> 

très apprécié

Répondre

4

Cela devrait fonctionner:

select top 10 RealXML.value('(/error/serverVariables/item[@name="REMOTE_HOST"]/value/@string)[1]', 'nvarchar(30)') 

testé par la méthode suivante:

DECLARE @xml XML = ' 
<error> 
    <serverVariables> 
    <item name="ALL_HTTP"> 
     <value string="..." /> 
    </item> 
    <item name="ALL_RAW"> 
     <value string="..." /> 
    </item> 
<item name="REMOTE_HOST"> 
    <value string="55.55.55.55" /> 
</item> 
    </serverVariables> 
</error> 
' 
SELECT @xml.value('(/error/serverVariables/item[@name="REMOTE_HOST"]/value/@string)[1]','nvarchar(30)') 
+0

+1 Ce serait le bon chemin. –