Gor*_*onB 9 xml sql xpath sql-server-2005
我有一个有XML字段的表.它包含的典型XML是;
<things>
<Fruit>
<imageId>39</imageId>
<title>Apple</title>
</Fruit>
<Fruit>
<imageId>55</imageId>
<title>Pear</title>
</Fruit>
<Fruit>
<imageId>76</imageId>
<title>Grape</title>
</Fruit>
</things>
Run Code Online (Sandbox Code Playgroud)
在我的表中,我有大约50行,我只关心两个字段,omId(int主键)和omText(我的xml数据).
我想要实现的是一种说法,在整个表格中的所有xml数据中...给我所有标题为X的xmlElements.或者给我一个使用imageId为55的所有项目的计数.
我正在使用XML数据类型VALUE和QUERY函数来检索数据.
select omID,
omText.query('/things/Fruit')
,cast('<results>' + cast(omText.query('/things/Fruit') as varchar(max)) + '</results>' as xml) as Value
from dbo.myTable
where omText.value('(/things/Fruit/imageId)[1]', 'int') = 76
Run Code Online (Sandbox Code Playgroud)
这只适用于我正在搜索的id是文档中的第一个.它似乎没有搜索所有的xml.
从根本上说,结果集为TABLE中的每个条目返回一行,我认为我需要为每个匹配的ELEMENT设置一行...不完全确定如何开始为此编写分组.
我开始觉得我正在努力使它变得更难......想法和想法请.
mar*_*c_s 16
我想要实现的是一种说法,在整个表格中的所有xml数据中...给我标题为X的所有xmlElements.
不确定我是否完全理解你的问题 - 或者你在寻找这个?您可以将所有/ things/Fruit元素作为"节点"抓取,并将它们与myTable中的"基础数据"交叉连接 - 结果将是XML数据字段中每个XML元素一行:
select
omID,
T.Fruit.query('.')
from
dbo.myTable
cross apply
omText.nodes('/things/Fruit') as T(Fruit)
where
T.Fruit.value('(title)[1]', 'varchar(50)') = 'X'
Run Code Online (Sandbox Code Playgroud)
或者给我一个使用imageId为55的所有项目的计数.
select
count(*)
from
dbo.myTable
cross apply
omText.nodes('/things/Fruit') as T(Fruit)
where
T.Fruit.value('(imageId)[1]', 'int') = 55
Run Code Online (Sandbox Code Playgroud)
这就是你要找的东西吗?
渣