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

¿Fue útil?

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)') 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top