2

我正在尝试使用 IN 表达式查询 xml 列。我还没有找到执行此类查询的本机 XQuery 方式,因此我尝试了两种解决方法:

  1. 将 IN 查询实现为 OR 的串联,如下所示:

     WHERE Data.exist('/Document/ParentKTMNode[text() = sql:variable("@Param1368320145") or 
     text() = sql:variable("@Param2043685301") or ...
    
  2. 使用 String fn:contains(...) 方法实现 IN 查询,如下所示:

    WHERE Data.exist('/Document/Field2[fn:contains(sql:variable("@Param1412022317"), .)]') = 1
    

其中给定参数是一个(长)字符串,其值由“|”分隔

问题是版本 1. 不适用于超过 50 个参数。服务器抛出内存不足异常。版本 2. 有效,但是非常非常慢。

有没有人 3. 想法?为了更完整地表述问题:给定任何 sql 本机类型的值列表,选择其 xml 列在 xml 中的特定字段具有给定值之一的所有行。

4

1 回答 1

1

尝试将所有参数插入表中并使用sql:column子句进行查询:

SELECT Mytable.Column FROM MyTable
CROSS JOIN (SELECT '@Param1' T UNION ALL SELECT '@Param2') B
WHERE Data.exist('/Document/ParentKTMNode[text() = sql:column("T") 
于 2011-09-23T09:44:27.567 回答