У нас есть 2 базы данных, скажем, DB1 и DB2.
DB1 содержит все хранимые процедуры, которые обращаются также к данным в DB2.
DB1 использует синонимы для доступа к таблицам в DB2.
(Использование синонимов является требованием в нашей ситуации)
Это прекрасно работает во всех ситуациях с SQL Server 2005 Developer Edition.
Однако в Express Edition мы получаем исключение, когда делаем следующее:
1 Перезагрузите SQL Server
2 Выполните следующий код в DB1:
установить снимок уровня изоляции транзакции
начать транзакцию
объявить @sQuery varchar (макс.)
set @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