使用LIKE或类似的完整搜索操作搜索XML

时间:2012-05-06 15:01:54

标签: sql xml xpath sql-server-2008-r2

我想搜索XML值列以查看a是否包含字符串。我不知道架构,我想知道字符串是否包含在任何地方。我不知道XPATH是否适用于这种情况。

相当于

Select s.Name, ts.ValueXML from table t (nolock) 
join table2 ts (nolock) on t.key_Id = ts.key_Id
join table3 s (nolock) on ts.key_Id=s.key_Id
where s.Name like '%Lab%' and ts.ValueXML  like '%PreviewDateRange%'
  

错误:参数数据类型xml对于类似的参数1无效   功能

相关的ts表格列

ValueXml (XML(.), null)

我正在搜索的项目应该是一个属性。因此,如果上述情况不可能,则包含该属性的任何内容都将是一个不错的选择。

2 个答案:

答案 0 :(得分:47)

最简单(但绝对不是最快的执行)方式是将列转换为nvarchar(max),然后再将其传递给like

cast(ValueXml as nvarchar(max)) like '%PreviewDateRange%'

答案 1 :(得分:3)

你去了:

SELECT *
FROM MyTable
WHERE MyXmlMetadataColumn.exist('//*/text()[contains(upper-case(.),upper-case("MySearchTerm"))]') = 1

这似乎对我来说很好,也不会将XML标记名称搜索为“dasblinkenlight”提供的解决方案。

我不知道它有多高效。