我想搜索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)
我正在搜索的项目应该是一个属性。因此,如果上述情况不可能,则包含该属性的任何内容都将是一个不错的选择。
答案 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”提供的解决方案。
我不知道它有多高效。