SQL Server:Express Edition中包含同义词的快照事务问题
-
03-07-2019 - |
题
我们有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日志中确认数据库在重新启动后正在正确恢复吗?