2011-08-19 52 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