jus*_*eve 3 sql-server xpath elmah sqlxml
库存的ELMAH_Error表使用nText字段来存储错误条目。我发现通过添加XML类型的字段来实现。然后将此新字段添加到填充该字段的SPROC的INSERT语句中;我可以更好地利用ELMAH的输出。
现在,我想学习如何查询该XML字段中的特定元素值。该文档的结构为:
<error [...]>
<serverVariables>
<item name="ALL_HTTP">
<value string="..." />
</item>
<item name="ALL_RAW">
<value string="..." />
</item>
.
.
.
</serverVariables>
</error>
Run Code Online (Sandbox Code Playgroud)
我需要能够查询下方特定项目的值。
因此,我正在看15seconds.com文章中的示例:
SELECT MyXml.value('(/root/product[@id="304"]/name)[1]', 'nvarchar(30)')
Run Code Online (Sandbox Code Playgroud)
并尝试将这些值映射到我的字段的结构-但不能。例如
select top 10 RealXML.value('(/error/serverVariables[@id="REMOTE_HOST"]/name)[0]', 'nvarchar(30)')
Run Code Online (Sandbox Code Playgroud)
格式化REMOTE_HOST的位置:
<item name="REMOTE_HOST">
<value string="55.55.55.55" />
</item>
Run Code Online (Sandbox Code Playgroud)
非常感激
这应该工作:
select top 10 RealXML.value('(/error/serverVariables/item[@name="REMOTE_HOST"]/value/@string)[1]', 'nvarchar(30)')
Run Code Online (Sandbox Code Playgroud)
使用以下测试:
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)')
Run Code Online (Sandbox Code Playgroud)