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