[英]How to update SQL Batch?
在我的客戶端,他們有一個數據庫。 完成數據庫的增量更改后,我在一個SQL文件中准備了SQL對象更改列表。
腳本是這樣的:
If sql object 1 present in database
DROP the SQL object 1
GO
create the SQL Object 1
If sql object 2 present in database
DROP the SQL object 2
create the SQL Object 2
我一直放棄現有的Object並重新創建它。
現在這批可能包含一些錯誤。
我的要求是,如果文件中有任何錯誤。 已重新創建非sql對象。 它應該回滾舊的sql對象。
如果沒有錯誤,那么它將創建所有SQL對象。
由於中間的GO
語句,我無法在sql中使用TRANSACTION。
怎么解決這個問題?
那么不要使用GO
。 只需從腳本中刪除它,然后在需要的地方添加BEGIN
和COMMIT TRANSACTION
命令。
BEGIN TRAN
IF EXISTS Object1
BEGIN
DROP Object1;
END
CREATE Object1;
IF EXISTS Object2
BEGIN
DROP Object2;
END
CREATE Object2;
COMMIT TRAN
通過DROP / CREATE修改數據庫模式有許多問題:
通常最好嘗試將對象從模式版本更改為模式版本。 這需要您了解當前部署的模式版本,但該問題很容易解決(使用數據庫擴展屬性,請參閱版本控制和數據庫 )。
回到你的問題,一個天真的方法是將你的整個腳本包裝在一個大的BEGIN TRAN / COMMIT中但很少有效:
XACT_ABORT ON
某種程度上有所幫助,但只有這么多。 對於這些resons,我建議采用一種更簡單,更安全的方法:在修改模式之前,先備份數據庫WITH COPY_ONLY
。 如果出現任何問題,請回滾到副本。 或者,數據庫快照可用作備份。 請參見如何:將數據庫還原為數據庫快照 。
請注意,BEGIN TRAN / COMMIT可以跨越批次(即可以由多個GO
分隔),因此您的問題不是問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.