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

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

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

  

设置事务隔离级别快照
  开始交易
  声明@sQuery varchar(max)
  设置@sQuery ='从synToSomeTableInDB2中选择*'   exec(@sQuery)
  提交交易

这将导致以下错误:

  

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

在没有EXEC的情况下使用或在Developer Edition上运行时,相同的选择查询会正常传递 在步骤1中重新启动服务器很重要,因为一旦与DB2建立连接,代码在SQL Server Express Edition上运行也很好。

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

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

有帮助吗?

解决方案

通过 Microsoft Connect 发现问题默认情况下,在SQL Server Express Edition上 true 上设置 AUTO_CLOSE 选项。
将此选项更改为 false 可解决问题。

其他提示

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

在第一次尝试运行此代码时是否始终出现错误,无论服务重新启动后经过的时间是多少?

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top