le champ XML de requête ELMAH
-
26-09-2019 - |
Question
Le tableau stock ELMAH_Error utilise un champ nText pour stocker une entrée d'erreur. Je trouve que par l'ajout d'un champ de type XML; puis en ajoutant ce nouveau champ à l'instruction INSERT de la procédure stockée qui renseigne sur le terrain; je pourrais faire un meilleur usage de la production ELMAH.
Maintenant, je voudrais savoir comment interroger les valeurs des éléments spécifiques dans ce domaine XML. Le document est structuré comme:
<error [...]>
<serverVariables>
<item name="ALL_HTTP">
<value string="..." />
</item>
<item name="ALL_RAW">
<value string="..." />
</item>
.
.
.
</serverVariables>
</error>
Je dois être en mesure d'interroger la valeur des éléments spécifiques sous.
Je recherche donc un exemple de l'article 15seconds.com :
SELECT MyXml.value('(/root/product[@id="304"]/name)[1]', 'nvarchar(30)')
et je 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 formaté:
<item name="REMOTE_HOST">
<value string="55.55.55.55" />
</item>
très apprécié
La solution
Cela devrait fonctionner:
select top 10 RealXML.value('(/error/serverVariables/item[@name="REMOTE_HOST"]/value/@string)[1]', 'nvarchar(30)')
Testé en utilisant les éléments suivants:
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)')