Dha*_*hal 4 xml sql sql-server xml-attribute
我在表(Qualifications)中有一个XML列(Criteria),它包含不同的XML:
<training ID="173"><badge ID="10027" /><badge ID="10028" /></training>
<book Category="Hobbies And Interests" PropertyName="C#" CategoryID="44" />
<sport Category="Hobbies And Interests" PropertyName="Cricket" CategoryID="46" />
<education ID="450" School="Jai ambe vidyalaya"></education>
Run Code Online (Sandbox Code Playgroud)
我想读取"training"节点下所有节点的"badge"节点"ID"属性.
有人可以帮忙吗?
仅badge内部元素的IDtraining
select t.c.value('.', 'int') ID
from Qualifications q
cross apply q.Criteria.nodes('//training[badge]/badge[@ID]/@ID') t(c)
Run Code Online (Sandbox Code Playgroud)
badge元素的ID (不仅在内部training)
select t.c.value('.', 'int') ID
from Qualifications q
cross apply q.Criteria.nodes('//badge[@ID]/@ID') t(c)
Run Code Online (Sandbox Code Playgroud)
如果Criteria列是nvarchar类型,则可以转换xml为:
select t.c.value('.', 'int') ID
from Qualifications q
cross apply (select convert(xml, q.Criteria) xmlCriteria) a
cross apply a.xmlCriteria.nodes('//training[badge]/badge[@ID]/@ID') t(c)
Run Code Online (Sandbox Code Playgroud)
试试这个样本,它应该有帮助(只需用你的表/列名替换@xml)
DECLARE @xml XML
SET @xml ='
<training ID="173">
<badge ID="10027" />
<badge ID="10028" />
</training>
<book Category="Hobbies And Interests" PropertyName="C#" CategoryID="44" />
<sport Category="Hobbies And Interests" PropertyName="Cricket" CategoryID="46" />
<education ID="450" School="Jai ambe vidyalaya"></education>'
SELECT data.col.value('(@ID)[1]', 'int')
FROM @xml.nodes('(/training/badge)') AS data(col)
Run Code Online (Sandbox Code Playgroud)
输出:
10027
10028
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10918 次 |
| 最近记录: |