Вопрос

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)') 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top