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é

Était-ce utile?

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)') 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top