2010-11-18 62 views
3

股票ELMAH_Error表使用nText字段存儲錯誤條目。我發現通過添加一個XML類型的字段;然後將此新字段添加到填充該字段的SPROC的INSERT語句中;我可以更好地使用ELMAH的輸出。查詢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

這應該工作:

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

select top 10 RealXML.value('(/error/serverVariables/item[@name="REMOTE_HOST"]/value/@string)[1]', 'nvarchar(30)') 

使用下面的測試

+0

+1這將是第一條道路。 – 2010-11-18 13:04:52