Consulta o campo XML de Elmah
-
26-09-2019 - |
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
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