我有以下SQL腳本:如何確保在SQL腳本失敗時重置MULTI_USER的登錄權限?
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
。
現在,如果事務內部的任何操作失敗(例如語法錯誤),我將永遠不會將數據庫重置回MULTI_USER
,這意味着它將永久停留在單用戶模式下(不是我想要的)。
有沒有辦法確保我們總是回到MULTI_USER
,哪怕是失敗?
我想我正在尋找相當於一個finally
塊在SQL中,但從我讀過的這個不存在。有另一種方法嗎?
值得注意的是,我不能將ALTER DATABASE
命令移動到事務中,因爲這是不允許的(因爲它們是立即提交的)。
感謝您的好評。這會處理'TRY'塊內的語法錯誤嗎?週一我回到工作崗位時我會試試這個。 – LeopardSkinPillBoxHat 2012-02-04 00:22:07
道歉,我在文檔中看到鏈接到該語法錯誤的文檔沒有處理。 – LeopardSkinPillBoxHat 2012-02-06 03:22:32
是的,看起來不幸的是TRY CATCH不會處理所有的事情,所以如果你使用這種無人值守的腳本(即作爲自動化作業的一部分),你一定要小心。另外,在重讀你的問題之後,由於它不處理語法錯誤,所以這可能不是一個足夠的答案。有一個問題,爲什麼你認爲你會遇到語法錯誤? – rsbarro 2012-02-06 16:30:20