Запрос поля XML запроса Elmah
-
26-09-2019 - |
Вопрос
Stock Elmah_Error Table использует поле Ntext для хранения записи ошибок. Я обнаружил, что, добавив поле типа XML; Затем добавляя это новое поле в текстовую оператор SPROC, который заполняет поле; Я мог бы лучше использовать вывод Эльмы.
Теперь я хотел бы узнать, как запросить определенные значения элементов в этом поле XML. Документ структурирован как:
<error [...]>
<serverVariables>
<item name="ALL_HTTP">
<value string="..." />
</item>
<item name="ALL_RAW">
<value string="..." />
</item>
.
.
.
</serverVariables>
</error>
Мне нужно иметь возможность запрашивать значение определенных предметов под.
Так что я смотрю на пример из 15seconds.com. статья:
SELECT MyXml.value('(/root/product[@id="304"]/name)[1]', 'nvarchar(30)')
И пытаясь отображать эти ценности в структуру моего поля - но не может. Например
select top 10 RealXML.value('(/error/serverVariables[@id="REMOTE_HOST"]/name)[0]', 'nvarchar(30)')
где detment_host отформатирован:
<item name="REMOTE_HOST">
<value string="55.55.55.55" />
</item>
очень признателен
Решение
Это должно работать:
select top 10 RealXML.value('(/error/serverVariables/item[@name="REMOTE_HOST"]/value/@string)[1]', 'nvarchar(30)')
Испытано, используя следующее:
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)')
Не связан с StackOverflow