3

ストック 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>

とても有難い

4

1 に答える 1

5

これはうまくいくはずです:

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)') 
于 2010-11-18T12:55:09.360 に答える