Sql server 使用名称空间查询xml的TSQL
我一直在寻找解决我问题的办法。实际上,我想从XML列中检索一些数据。 以下是数据:Sql server 使用名称空间查询xml的TSQL,sql-server,xml,tsql,Sql Server,Xml,Tsql,我一直在寻找解决我问题的办法。实际上,我想从XML列中检索一些数据。 以下是数据: <Notification xmlns="http://model.company/notification/de/v1" dateNotification="2017-07-24T11:47:51.012+02:00" identifiant="4b7330c7-021f-4cf9-ace6-f74d73f409ef" personneId="1071249" so
<Notification xmlns="http://model.company/notification/de/v1"
dateNotification="2017-07-24T11:47:51.012+02:00"
identifiant="4b7330c7-021f-4cf9-ace6-f74d73f409ef"
personneId="1071249"
source="REGLES"
sourceVersion="1.0.17"
typeMouvement="MODIFICATION">
<EvenementDE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
referenceOriginale="1071249"
xsi:type="ChangementSignaletique">
<Champ
ancienneValeur="Doe"
nom="nom"
nouvelleValeur="DOE" />
</EvenementDE>
<EvenementDE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
referenceOriginale="1071249"
xsi:type="ChangementSignaletique">
<Champ
ancienneValeur="John"
nom="prenom"
nouvelleValeur="John Carl" />
</EvenementDE>
</Notification>
我想检索“旧版本”、“新版本”作为一个特定的“参考原始版本”。
这是小提琴手:
从根目录获取属性很容易,但无法从Champ获取属性
我希望有人能帮助我。
提前感谢。对于要查询/显示的元素和属性,必须使用适当的
DECLARE @xml XML = N'... your xml...';
WITH XMLNAMESPACES (DEFAULT 'http://model.company/notification/de/v1')
SELECT
N.N.value('./Champ[1]/@ancienneValeur', 'NVARCHAR(100)') AS [ancienneValeur]
FROM @xml.nodes('/Notification/EvenementDE') As N(N)
WHERE N.N.value('./@referenceOriginale', 'INT') = 1071249
。。。结果
ancienneValeur
Doe
John
尤其是对于较大的XML,最好将
WHERE
作为谓词包含到.nodes()
的XQuery
中。类似于.nodes('/Notification/EvenementDE[@ReferenceOriginale=1071249]')
。如果需要,可以使用sql:variable()
或sql:column()
引入硬编码值。这一点很好。.exist(…)
函数也比.value(…)
和.query(…)
快