27

我想搜索一个 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)

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

4

2 回答 2

55

最简单(但绝对不是执行速度最快)的方法是在将列传递给nvarchar(max)之前将其转换为like

cast(ValueXml as nvarchar(max)) like '%PreviewDateRange%'
于 2012-05-06T15:18:40.803 回答
3

你去:

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

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

我不知道它的性能如何。

于 2014-12-03T09:44:30.583 回答