У меня есть следующий сценарий SQL:
USE MyDatabase
ALTER DATABASE MyDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
BEGIN TRANSACTION
-- Write to tables here
COMMIT TRANSACTION
ALTER DATABASE MyDatabase SET MULTI_USER
GO
Я хочу убедиться, что моя база данных не доступна во время выполнения сценария, поэтому я устанавливаю базу данных на SINGLE_USER
вtop.
Теперь, если что-то внутри транзакции завершится неудачно (например, синтаксическая ошибка), я никогда не верну базу данных обратно к MULTI_USER
, что означает, что она будет постоянно зависать в однопользовательском режиме (не то, что я хочу).
Есть ли способ гарантировать, что мы всегда возвращаемся к MULTI_USER
, даже при сбое?
Я думаю, я ищу эквивалент блока finally
в SQL, ноиз того, что я прочитал, этого не существует.Есть ли другой способ?
Стоит отметить, что я не могу переместить команды ALTER DATABASE
в транзакцию, поскольку это недопустимо (так как они фиксируются немедленно).