У нас есть 2 базы данных, скажем, DB1 и DB2.
DB1 содержит все хранимые процедуры, которые также обращаются к данным в DB2.
DB1 использует синонимы для доступа к таблицам в DB2.
(Использование синонимов — это потребность в нашей ситуации)
Это отлично работает во всех ситуациях с SQL Server 2005 Developer Edition.
Однако в Express Edition мы получаем исключение, когда делаем следующее:
1 Перезапускаем SQL Server
2 Выполняем следующий код в DB1:
установить моментальный снимок уровня изоляции транзакции
начать транзакцию
объявить @sQuery varchar(max)
установить @sQuery = 'Select * from synToSomeTableInDB2'
exec (@sQuery)
зафиксировать сделка
Это приведет к следующей ошибке:
Сбой транзакции изоляции моментального снимка в базе данных "...", так как база данных не была восстановлена при запуске текущей транзакции. Повторите транзакцию после восстановления базы данных.
Тот же запрос на выборку проходит нормально при использовании без EXEC или при запуске в Developer Edition.
Перезапуск сервера на шаге 1 важен, так как после установления соединения с DB2 код также нормально работает в SQL Server Express Edition. .
Кто-нибудь знает, что это такое? Нам нужно иметь возможность использовать EXEC для некоторых динамических запросов. Мы уже проверили MSDN, искали в Google, ... Мы очень признательны за любую помощь.
--- Изменить: 10 марта 09 г.
Как обсуждалось ниже с Эдом Харпером, я подал отчет об ошибке для этого.
См. https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=422150