使用SQL Server XML数据类型

前端之家收集整理的这篇文章主要介绍了使用SQL Server XML数据类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个有 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>

在我的表中,我有大约50行,我只关心两个字段,omId(int primary key)和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

哪个只在我正在搜索的id是文档中的第一个.它似乎没有搜索所有的xml.

从根本上说,结果集返回了TABLE中每个条目的一行,我认为我需要为每个匹配的ELEMENT有一行…不完全确定如何开始为这个文件写一个组.

我开始感觉到我正在努力使其变得比它需要的更难……想法和想法

解决方法

What i’m trying to achieve is a way of saying,across all
xml data in the whole table… give me all of the xmlElements
where the title is X.

不知道我是否完全理解你的问题 – 还是在寻找这个?您将抓住所有/ 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'

Or give me a count of all items that use an imageId of 55.

select 
   count(*)
from 
   dbo.myTable
cross apply
   omText.nodes('/things/Fruit') as T(Fruit)
where 
   T.Fruit.value('(imageId)[1]','int') = 55

这是你要找的?

渣子

猜你在找的MsSQL相关文章