2010-11-18 3 views
3

В таблице ELMAH_Error для хранения записи ошибки используется поле nText. Я обнаружил, что добавив поле типа XML; затем добавив это новое поле в инструкцию INSERT SPROC, которая заполняет поле; я мог бы лучше использовать выход ELMAH.Query Поле ELMAH XML

Теперь я хотел бы узнать, как запрашивать определенные значения элементов в этом поле 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)') 

где REMOTE_HOST отформатирован:

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

высоко ценится

ответ

4

Это должно работать:

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)') 
+0

+1 Это был бы путь. – 2010-11-18 13:04:52

 Смежные вопросы

  • Нет связанных вопросов^_^