2011-08-19 48 views
2

我试图使用IN表达式来查询xml列。我还没有找到做这样的查询的自带XQuery的方式,所以我已经试过两种解决方法:在MSSQLServer 2005中使用XQuery实现IN查询

  1. 落实IN查询作为OR的这样的串联:

    WHERE Data.exist('/Document/ParentKTMNode[text() = sql:variable("@Param1368320145") or 
    text() = sql:variable("@Param2043685301") or ... 
    
  2. 实施在查询中使用String FN:包含(...)方法是这样的:

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

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

问题是,版本1不适用于超过50个参数。服务器引发内存不足异常。版本2.工作,但非常非常慢。

有没有人有3个想法?要将问题描述得更加完整:给定任何sql本机类型的值列表,选择其xml列在xml中的特定字段处具有给定值之一的所有行。

回答

1

尝试插入使用SQL在表和查询所有的参数:列条款:

SELECT Mytable.Column FROM MyTable 
CROSS JOIN (SELECT '@Param1' T UNION ALL SELECT '@Param2') B 
WHERE Data.exist('/Document/ParentKTMNode[text() = sql:column("T") 
+0

这是一个有趣的想法。在我的测试中,查询速度非常快。我不知道,如果我可以实现这一点,因为它需要一个真正的表格,我需要以某种方式插入我首先要查找的键。我不知道,如果这可以适应我已经得到的代码。但看起来,这绝对是一条路。 – Mario