Pergunta

A tabela Stock Elmah_error usa um campo NTEXT para armazenar uma entrada de erro. Descobri isso adicionando um campo do tipo XML; Em seguida, adicionar este novo campo à declaração de inserção do SPROC que preenche o campo; Eu poderia fazer melhor uso da saída de Elmah.

Agora eu gostaria de aprender a consultar valores específicos de elementos dentro desse campo XML. O documento está estruturado como:

<error [...]>
  <serverVariables>
    <item name="ALL_HTTP">
      <value string="..." />
    </item>
    <item name="ALL_RAW">
      <value string="..." />
    </item>
    .
    .
    .
  </serverVariables>
</error>

Eu preciso poder consultar o valor de itens específicos abaixo.

Então, estou olhando para um exemplo do 15seconds.com artigo:

SELECT MyXml.value('(/root/product[@id="304"]/name)[1]', 'nvarchar(30)')

E estou tentando mapear esses valores para a estrutura do meu campo - mas não posso. Por exemplo

select top 10 RealXML.value('(/error/serverVariables[@id="REMOTE_HOST"]/name)[0]', 'nvarchar(30)') 

onde remote_host é formatado:

<item name="REMOTE_HOST">
  <value string="55.55.55.55" />
</item>

muito apreciado

Foi útil?

Solução

Isso deve funcionar:

select top 10 RealXML.value('(/error/serverVariables/item[@name="REMOTE_HOST"]/value/@string)[1]', 'nvarchar(30)') 

Testado usando o seguinte:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top