回答

收藏

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

技术问答 技术问答 259 人阅读 | 0 人回复 | 2023-09-14

我想搜索一个XML值列,看是否包含一个字符串。我不知道架构,我想知道字符串是否包含在任何地方。我不知道XPATH是否可以在这种情况下工作。  ^+ q/ ^& J$ `' s1 |: d; A, y
相当于
4 e( w8 N. Q. v7 e& m7 R1 USelect s.Name, ts.ValueXML from table t (nolock) 0 u" `2 O, F2 P  i
join table2 ts (nolock) on t.key_Id = ts.key_Id/ N7 t/ S  G% t
join table3 s (nolock) on ts.key_Id=s.key_Id2 K& x$ Q0 u4 |" x: C
where s.Name like '%Lab%' and ts.ValueXML  like '%PreviewDateRange%'% `" r  |" M3 g! e0 j( ?( i

2 x- x8 Y! Y1 l0 J, ~错误:参数数据类型xml对于同类函数的参数1无效。& ]5 P. f; \# c5 q

8 J8 m, e2 d" O$ R相关ts表格列# m" l: n7 v  Q  O
ValueXml (XML(.), null)
) T1 U8 B; I8 S7 R7 @; c我要搜索的项目应该是一个属性。因此,如果上述方法不可能实现,那么包含该属性的任何内容都将是一个不错的选择。
6 M- ^0 ?; l: ^                * B7 ]2 B. ?+ x$ k8 V( h
解决方案:5 k8 ?- w5 _: R5 q. T) S; h  [
                3 v$ ]+ o* C2 c& x8 J: u8 s% z6 Q

8 \# r" U' S9 v  {5 D8 p1 t
$ ^1 d* Y- X- m1 l1 k- q1 K- i                最简单(但绝对不是最快执行)的方法是在将列传递给nvarchar(max)之前将其强制转换为like:
* a) w( z4 {3 ]. lcast(ValueXml as nvarchar(max)) like '%PreviewDateRange%'
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则