campo XML Query di ELMAH
-
26-09-2019 - |
Domanda
La tabella stock ELMAH_Error utilizza un campo nText per memorizzare una voce errore. Ho scoperto che con l'aggiunta di un campo di tipo XML; quindi l'aggiunta di questo nuovo campo per l'istruzione INSERT del SPROC che popola il campo; ho potuto fare un uso migliore della produzione di ELMAH.
Ora vorrei imparare a valori degli elementi di query specifiche all'interno di quel campo XML. Il documento è strutturato come:
<error [...]>
<serverVariables>
<item name="ALL_HTTP">
<value string="..." />
</item>
<item name="ALL_RAW">
<value string="..." />
</item>
.
.
.
</serverVariables>
</error>
Ho bisogno di essere in grado di interrogare il valore di elementi specifici sotto.
Così sto guardando un esempio da questo articolo 15seconds.com :
SELECT MyXml.value('(/root/product[@id="304"]/name)[1]', 'nvarchar(30)')
e sto cercando di mappe questi valori per la struttura del mio campo - ma non può. Per es.
select top 10 RealXML.value('(/error/serverVariables[@id="REMOTE_HOST"]/name)[0]', 'nvarchar(30)')
dove è formattato REMOTE_HOST:
<item name="REMOTE_HOST">
<value string="55.55.55.55" />
</item>
molto apprezzato
Soluzione
Questo dovrebbe funzionare:
select top 10 RealXML.value('(/error/serverVariables/item[@name="REMOTE_HOST"]/value/@string)[1]', 'nvarchar(30)')
Testato utilizzando la seguente:
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)')