campo XML de consulta ELMAH
-
26-09-2019 - |
Pregunta
La tabla stock ELMAH_Error utiliza un campo nText para almacenar una entrada de error. He descubierto que mediante la adición de un campo de tipo XML; a continuación, la adición de este nuevo campo de la instrucción INSERT de la sproc que puebla el campo; yo podría hacer un mejor uso de la salida de ELMAH.
Ahora me gustaría aprender a valores de elementos de consulta específicos dentro de ese campo XML. El documento está estructurado como:
<error [...]>
<serverVariables>
<item name="ALL_HTTP">
<value string="..." />
</item>
<item name="ALL_RAW">
<value string="..." />
</item>
.
.
.
</serverVariables>
</error>
Tengo que ser capaz de consultar el valor de determinados artículos por debajo.
Así que estoy buscando a un ejemplo del artículo de 15seconds.com :
SELECT MyXml.value('(/root/product[@id="304"]/name)[1]', 'nvarchar(30)')
y estoy tratando de mapas de esos valores en la estructura de mi campo - pero no puede. Por ejemplo.
select top 10 RealXML.value('(/error/serverVariables[@id="REMOTE_HOST"]/name)[0]', 'nvarchar(30)')
donde se formatea REMOTE_HOST:
<item name="REMOTE_HOST">
<value string="55.55.55.55" />
</item>
muy apreciado
Solución
Esto debería funcionar:
select top 10 RealXML.value('(/error/serverVariables/item[@name="REMOTE_HOST"]/value/@string)[1]', 'nvarchar(30)')
ensayó usando el siguiente:
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)')