我正在尝试使用 IN 表达式查询 xml 列。我还没有找到执行此类查询的本机 XQuery 方式,因此我尝试了两种解决方法:
将 IN 查询实现为 OR 的串联,如下所示:
WHERE Data.exist('/Document/ParentKTMNode[text() = sql:variable("@Param1368320145") or text() = sql:variable("@Param2043685301") or ...
使用 String fn:contains(...) 方法实现 IN 查询,如下所示:
WHERE Data.exist('/Document/Field2[fn:contains(sql:variable("@Param1412022317"), .)]') = 1
其中给定参数是一个(长)字符串,其值由“|”分隔
问题是版本 1. 不适用于超过 50 个参数。服务器抛出内存不足异常。版本 2. 有效,但是非常非常慢。
有没有人 3. 想法?为了更完整地表述问题:给定任何 sql 本机类型的值列表,选择其 xml 列在 xml 中的特定字段具有给定值之一的所有行。