DB1 と DB2 という 2 つのデータベースがあります。
DB1 には、DB2 のデータにもアクセスするすべてのストアド プロシージャが含まれています。
DB1 はシノニムを使用して DB2 のテーブルにアクセスします。
(私たちの状況では同義語を使用することが必須です)
これは、SQL Server 2005 Developer Edition のすべての状況で問題なく機能します。
ただし、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
これにより、次のエラーが発生します。
現在のトランザクションが開始されたときにデータベースが回復されなかったため、データベース '...' でスナップショット分離トランザクションが失敗しました。データベースが復旧してから、トランザクションを再試行してください。
同じ選択クエリは、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
を参照してください。