2016-11-15 51 views
0

我有這樣的XML:如何在XQuery中SQL服務器節點XML文件分析器性能

enter image description here

我想對屬性名的值=「ParticipTypeName」我使用類似的東西:

;WITH XMLNAMESPACES(DEFAULT  'http://xml.common.asset.aoma.sonymusic.com/ProductMetadata.xsd') 
SELECT 
    x.u.value('(/BusinessUnitProperties/Property[@name = "ParticipTypeName"])[1]', 'varchar(100)') as ParticipTypeName 
from 
    @XML.nodes('/ProductMetadata/Tracks/Track/Participants/Participant') x(u) 

它不起作用。 我應該如何獲得這個屬性的價值?

回答

1

試試這個:

SELECT x.u.value('(//*:Property[@*:name="ParticipTypeName"])[1]','nvarchar(max)') 

//將搜索任何元素<Property>XQuery-過濾器將選擇您正在查找的名稱。 *:將允許您忽略名稱空間。

+0

不起作用:XQuery [value()]:'value()'需要一個單例(或空序列),找到操作數'xdt:untypedAtomic *' – jruiz

+0

@ jruiz傻我!當然,編輯我的答案... – Shnugo

+0

工作,但我不能使用//將搜索任何元素,我需要訪問節點BusinessUnitProperties /財產,並獲得財產[@name =「ParticipTypeName」],你能幫我?因爲xml太長了,它在不同節點上有很多屬性 – jruiz