当前位置: 首页 > 面试题库 >

使用SQL Server XML数据类型

缪志新
2023-03-14
问题内容

我有一个具有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主键)和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是文档中的第一个ID的情况下才有效。它似乎并没有搜索所有的xml。

从根本上说,结果集返回表中的每个条目一行,我想我需要为每个匹配的元素有一行…不确定如何为此写一个分组依据。

我开始觉得我正在使这个工作变得比需要做的难。


问题答案:

我想要实现的是一种表达方式,跨整个表中的所有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'

或给我计数使用imageId为55的所有项目的数量。

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

那是您要找的东西吗?



 类似资料:
  • 我已经将Luxon创建的datetime值保存到postgres数据库列中,类型为TIMESTAMP(3)。然后我想使用这个值,把它转换成其他时区,等等。然而,我似乎想不出如何“利用”它。 我使用以下方法创建了该对象: 然后,我将其插入到postgres数据库中,插入时间戳(3)类型的列中。 我使用查询从数据库中提取它。当我记录它时,它说它的值是: 我可以找到很多关于如何将日期插入sql的教程,但

  • 在介绍 Python 的常用数据类型之前,我们先看看 Python 最基本的数据结构 - 序列(sequence)。 序列的一个特点就是根据索引(index,即元素的位置)来获取序列中的元素,第一个索引是 0,第二个索引是 1,以此类推。 所有序列类型都可以进行某些通用的操作,比如: 索引(indexing) 分片(sliceing) 迭代(iteration) 加(adding) 乘(multi

  • 在之前的 JavaScript 基础文章中(编号 02、编号 07),我们介绍过,变量有以下数据类型: 基本数据类型(值类型):String 字符串、Number 数值、Boolean 布尔值、Null 空值、Undefined 未定义。 引用数据类型(引用类型):Object 对象。 本文,我们针对这两种类型,做个详细介绍。我们先来看个例子。 基本数据类型举例: var a = 23;

  • 问题内容: 如何实现使用通用数据类型将我的包裹写入我的包裹? 这是我的代码。 问题答案: 您的课程应该实现Parcelable。上面的代码就是一个例子。 您的问题是您正在尝试将通用数据类型读取/写入包裹。 但是无法在包裹中读取/写入通用数据类型。了解更多如何使用Parcelable 这里 和包裹在这里

  • 问题内容: 有时将相关数据聚集在一起是有意义的。我倾向于这样做,例如, 我的一位同事更喜欢开课 注意,我们没有定义任何类方法。 我喜欢使用字典,因为我想减少代码行数。我的同事认为,如果您使用类,则代码更易读,并且将来可以更轻松地向类中添加方法。 你更喜欢哪个?为什么? 问题答案: 如果您真的从不定义任何类方法,那么我认为dict或namedtuple更有意义。Simple + builtin很好!

  • 我正在尝试从相应的字符串值填充Kotlin数据类。我使用GSON查看了来自Json的:Kotlin数据类,但我试图做的并不是跟踪完全相同的: 调用此函数并尝试填充以下类: 但没有欢乐。stringValue是gson.toJson(value)生成的东西,其中value是一个JSONObject。 有人知道我的断线是什么吗?