3

我们有 2 个数据库,比如 DB1 和 DB2。
DB1 包含访问 DB2 中数据的所有存储过程。
DB1 使用同义词来访问 DB2 中的表。
(在我们的情况下,使用同义词是一项要求)

这在使用 SQL Server 2005 Developer Edition 的所有情况下都可以正常工作。

但是在 Express Edition 中,当我们执行以下操作时会出现异常:
1 重新启动 SQL Server
2 在 DB1 中执行以下代码:

设置事务隔离级别快照
开始事务
声明@sQuery varchar(max)
设置@sQuery = 'Select * from synToSomeTableInDB2'
exec (@sQuery)
提交事务

这将导致以下错误:

数据库“...”中的快照隔离事务失败,因为在启动当前事务时未恢复数据库。数据库恢复后重试事务。

在不使用 EXEC 或在 Developer Edition 上运行时,相同的选择查询可以正常通过。
在步骤 1 中重新启动服务器很重要,因为一旦连接到 DB2,代码在 SQL Server Express Edition 上也可以正常运行。

有谁知道这是什么?我们需要能够使用 EXEC 进行一些动态查询。我们已经检查了 MSDN,搜索了 Google,......任何帮助都非常感谢。

--- 编辑:2009 年 3 月 10 日
正如下面 Ed Harper 所讨论的,我已经为此提交了一份错误报告。
请参阅https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=422150

4

2 回答 2

3

As found out via Microsoft Connect, the problem is that by default on SQL Server Express Edition the AUTO_CLOSE option is set on true.
Changing this option to false fixes the problem.

于 2009-03-30T08:18:48.027 回答
1

错误消息表明查询失败,因为当您执行查询时,服务重新启动后 SQL 服务器仍在恢复数据库。

错误是否总是在第一次尝试运行此代码时发生,而不管服务重新启动后经过的时间?

您能否从 SQL Server 日志中确认数据库在重新启动后正在正确恢复?

于 2009-03-05T11:07:58.657 回答