2009-03-05 13 views
3

我們有2個數據庫,比如DB1和DB2。
DB1包含訪問DB2中的數據的所有存儲過程。
DB1使用同義詞來訪問DB2中的表。
(在我們的情況下使用同義詞是需求)SQL Server:Express Edition中同義詞的快照事務問題

在SQL Server 2005開發版的所有情況下,這種方法非常合適。

但是Express Edition中,我們得到了一個例外,當我們做到以下幾點:
1重新啓動SQL Server
2 DB1內執行下面的代碼:

set transaction isolation level snapshot
begin transaction
declare @sQuery varchar(max)
set @sQuery = 'Select * from synToSomeTableInDB2'
exec (@sQuery)
commit transaction

這將導致以下錯誤:

Snapshot isolation transaction failed in database '...' because the database was not recovered when the current transaction was started. Retry the transaction after the database has recovered.

相同的select查詢在沒有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

回答

3

由於通過Microsoft Connect發現,問題是,默認情況下,SQL Server Express Edition的AUTO_CLOSE選項設置上
將此選項更改爲false解決了此問題。

1

錯誤消息表明查詢失敗,因爲執行查詢時,SQL Server仍在恢復服務重新啓動後的數據庫。

無論自服務重新啓動以來經過的時間是否第一次嘗試運行此代碼時,是否始終發生錯誤?

您可以從SQL Server日誌中確認數據庫在重新啓動後是否正確恢復?

+0

重新啓動只是爲了確保以前沒有連接到DB2。不管時間如何,只要沒有連接到DB2,就會發生錯誤。 – Marc 2009-03-06 09:38:30