2012-08-08 54 views
0

首先,我會開始注意到,它不是我選擇在XML中使用nvp,而是在修改過程中使用nvp。話雖這麼說,我有一個包含具有以下XML的XML列的表:名稱值對的SQL XML查詢?

<root> 
    <results> 
    <result name='First Result'> 
     <property name='Property1' value='Value1' /> 
     <property name='Property2' value='Value2' /> 
    </result> 
    </results> 
</root> 

我有以下查詢得到我的結果名稱:

SELECT 
    T.N.value('@name', 'nvarchar(256)') AS resultName 
FROM 
    results CROSS APPLY xmlField.nodes('/root/results/result') AS T(N) 

但我不是積極如何我可以讓財產顯示。我嘗試以下:

SELECT 
    T.N.value('@name', 'nvarchar(256)') AS resultName, 
    T.N.value('/property[@name="Property1"]/@value', 'nvarchar(256)') AS Property 
FROM 
    results CROSS APPLY xmlField.nodes('/root/results/result') AS T(N) 

但我得到以下錯誤:

的XQuery [導致.xmlField.value()]: '值()' 需要單(或空序列),實測值操作數的類型'xdt:untypedAtomic *'

我知道我走的是正確的道路,但我不太確定我應該做什麼。任何人都可以指出我正確的方向嗎?

回答

3

這是你在追求什麼?

SELECT 
    T.N.value('../@name','varchar(255)') as resultName, 
    T.N.value('@name', 'nvarchar(256)') AS Propertyname , 
    T.N.value('@value', 'nvarchar(256)') as Value  
FROM 
    results 
     cross apply 
    xmlfield.nodes('/root/results/result/property') AS T(N) 
where 
    T.N.value('@name', 'nvarchar(256)') ='property1' 

OR

SELECT 
    T.N.value('@name', 'nvarchar(256)') AS resultName, 
    T.N.value('(./property[@name="Property1"]/@value)[1]', 'nvarchar(256)') AS Property 
FROM 
    results CROSS APPLY xmlField.nodes('/root/results/result') AS T(N) 
+0

關閉,但我希望在選擇字段中提供過濾功能,因爲這將允許我準確控制返回的屬性。 – Kyle 2012-08-08 14:24:37

+0

我添加了where子句... – podiluska 2012-08-08 14:27:22

+0

謝謝。我想我仍然沒有解釋我在找什麼。 where子句將其限制爲僅一個實體。我特別試圖在xquery中進行過濾,以便可以使用已知的屬性名稱來區別該字段。我猜這更多的是一個xquery問題。感謝您的幫助,您的回答給了我更多想法來思考。 – Kyle 2012-08-08 14:31:57

0

嘗試查找在XPath的第一個匹配的節點。

SELECT organizationDeviceId, 
     T.N.value('@name', 'nvarchar(256)') AS resultName, 
     T.N.value('(/property[@name="Property1"])[1]/@value', 'nvarchar(256)') AS Property 
     FROM results CROSS APPLY xmlField.nodes('/root/results/result') AS T(N) 

我不是100%確定的結果,但需要使用[1]查找第一個結果。

+0

謝謝。我試過這個查詢,但是我得到了NULL屬性字段。這讓我有更多的想法嘗試。 – Kyle 2012-08-08 14:26:37