質問

株式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>

私は下の特定の項目の値を照会できるようにする必要があります。

だから私は、 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>

に感謝

役に立ちましたか?

解決

これは動作するはずます:

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