代码之家  ›  专栏  ›  技术社区  ›  LaserJesus

为什么在事务范围内调用sql server 2008中的全文搜索会失败?

  •  0
  • LaserJesus  · 技术社区  · 15 年前

    以下代码:

    var foo = Users.Join(
                    tvf_SearchUsers(queryString),
                    u => u.User_Id,
                    s => s.User_Id,
                    (u, s) => u);
    

    根据使用全文搜索的表值函数(tvf_search users)选择与查询字符串匹配的用户。此代码片段是一个较大方法的一部分,该方法在生产中使用时可以成功工作。但是,当我调用与mbunit测试相同的方法时(mbunit测试具有rollback属性),搜索无法返回预期结果。如果删除rollback属性,它将正常工作。单元测试创建虚拟用户等,然后由回滚清除。表值函数似乎看不到这些创建的项,就好像它不在事务范围内一样。有人知道怎么避开这个吗?

    更新的

    如果我在tvf中将全文搜索功能替换为更简单的查询,则操作将按预期进行。所以这个问题和全文搜索有关。我使用的是sql server 2008,因此afaik sql server应该能够将全文查询保留在事务范围内。

    1 回复  |  直到 15 年前
        1
  •  1
  •   eglasius    15 年前

    这可能是由于全文搜索/事务组合。如果是SQL 2005,我认为全文搜索在事务下不会看到更改。检查这篇文章 http://blog.stackoverflow.com/2008/11/sql-2008-full-text-search-problems/ ,当提到sql server 2008现在可以在全文搜索上处理事务时,这在一段时间前导致了一些问题。