Sql 使用类似或类似的完全搜索操作搜索XML

Sql 使用类似或类似的完全搜索操作搜索XML,sql,xml,xpath,sql-server-2008-r2,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.Va

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

我正在搜索的项目应该是属性。因此,如果上述方法不可行,那么任何包含该属性的方法都是一个很好的选择。

最简单(但肯定不是执行最快)的方法是将列强制转换为
nvarchar(max)
,然后将其传递给
like

cast(ValueXml as nvarchar(max)) like '%PreviewDateRange%'
好了:

SELECT *
FROM MyTable
WHERE MyXmlMetadataColumn.exist('//*/text()[contains(upper-case(.),upper-case("MySearchTerm"))]') = 1
这对我来说似乎很好,而且也不像“dasblinkenlight”提供的解决方案那样搜索XML标记名


但我不知道它的性能如何。

这应该可以。您能给出一个不起作用的示例吗?您能发布表定义,并用您正在使用的RDBMS类型标记问题吗?这是一个非生产性的一次性查询。表现并不重要。我尝试了这个,但得到了一个错误:将一个或多个字符从XML转换为目标排序规则impossible@P.Brian.Mackey我试过了,效果很好。需要编辑,因为散文响应提到cast varchar,代码提到nvarchar。Varchar很好,但是如果遇到排序规则转换,可以使用nvarchar——这是我需要的部分。这似乎也可以搜索XML标记名。有没有办法摆脱这些?