为啥在事务范围内调用 SQL Server 2008 中的全文搜索失败?

Posted

技术标签:

【中文标题】为啥在事务范围内调用 SQL Server 2008 中的全文搜索失败?【英文标题】:Why does calling full text search in SQL Server 2008 fail when inside transaction scope?为什么在事务范围内调用 SQL Server 2008 中的全文搜索失败? 【发布时间】:2009-03-10 03:55:46 【问题描述】:

以下代码:

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

根据使用全文搜索的表值函数 (tvf_SearchUsers) 选择与查询字符串匹配的用户。此代码 sn-p 是在生产中使用时成功运行的更大方法的一部分。但是,当我在具有回滚属性的 MBUnit 测试中调用相同的方法时,搜索无法返回预期结果。如果我删除回滚属性,它可以正常工作。单元测试创​​建虚拟用户等,然后由回滚清理。似乎这些创建的项目没有被表值函数看到,就好像它在事务范围之外一样。有谁知道如何解决这个问题?

更新

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

【问题讨论】:

【参考方案1】:

这可能是由于全文搜索/交易组合。如果它是 sql 2005,我认为全文搜索不会在您进行事务处理时看到更改。请查看此帖子 https://blog.***.com/2008/11/sql-2008-full-text-search-problems/,当提到 sql server 2008 现在可以处理全文搜索事务并且前段时间给 SO 带来了一些问题。

【讨论】:

感谢您的链接,很有趣...我实际上是针对 2008 年运行的。无论如何,我正在做的很多事情都会在以后更改为类似 lucene 的东西,所以这就是现在也不是一个选择。我只需要一个简单的技巧来让我的单元测试再次工作。

以上是关于为啥在事务范围内调用 SQL Server 2008 中的全文搜索失败?的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER的锁机制——概述(锁与事务隔离级别)

为啥我们不能在 SQL Server 中的函数内执行存储过程

sqlserver事务可以嵌套多少事务,为啥,回答对的还可以加分

SQL Server为啥日志文件越来越大

SQL Server 2005:读取提交事务隔离级别中的键范围锁?

SQL Server事务