以以下 4 个示例 XML 文档为例:
<例子> <颜色>橙色颜色> 例子>
<示例> <汽车 colour="orange">福特 焦点
<例子>
Orange 县县> 例子> <示例> <橙色>555橙色> 例子>
这些都存储在具有 XML 数据类型列(未类型化)的表中的 SQL Server 数据库中。
我将如何运行查询来查找文档中包含单词 orange 的所有内容,这将返回以下文档:
- 这在元素中有一个值 orange。
- 这在属性中有一个值 orange。
- 这在元素中有一个值 Orange County(注意 Orange 一词的不同大小写)
文档 4 不应在查询结果中返回,因为单词 orange 是元素名称而不是数据值。
这可能吗?
提前致谢。
最佳答案
我认为您无法在单个查询中完成此操作 - 但是,通过两个查询,您应该会获得所需的结果:
首先查询以获取包含看起来像“橙色”的文本(在元素内)的所有 XML 节点:
SELECT * FROM dbo.XQueryTest WHERE XmlContent.value('(//*/text())[1]', 'varchar(50)') LIKE '%orange%'
第二个查询执行相同的操作,但基于属性值:
SELECT * FROM dbo.XQueryTest WHERE XmlContent.value('(//*/@*)[1]', 'varchar(50)') LIKE '%orange%'
查询 1 只是获取所有 XML 节点的 text()
的值作为字符串 (varchar(50)
) 并根据常规 SQL 语法将其与'%orange%'。
查询编号2 获取所有属性值 (/@*
) 并执行相同的操作。
当然,如果确实需要,您可以UNION
将这两者结合在一起。
希望这对您有所帮助!
关于xml - 在 SQL Server 2008 中使用 XQuery 搜索内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2269795/