對於我的數據庫升級腳本,我通常只有一個長腳本,對該數據庫版本進行了必要的更改。但是,如果一個語句在腳本中途失敗,則會使數據庫處於不一致狀態。原子升級腳本
我該如何讓整個升級腳本進行一次原子操作?我試過只是在一個事務中包裝所有的語句,但這是行不通的。即使使用SET XACT_ABORT ON,如果一條語句失敗並回滾事務,其餘語句也會繼續。我想要一個解決方案,不需要我在每個語句前寫入IF @@ TRANCOUNT> 0 ...。例如:
SET XACT_ABORT ON;
GO
BEGIN TRANSACTION;
GO
CREATE TABLE dbo.Customer
(
CustomerID int NOT NULL
, CustomerName varchar(100) NOT NULL
);
GO
CREATE TABLE [dbo].[Order]
(
OrderID int NOT NULL
, OrderDesc varchar(100) NOT NULL
);
GO
/* This causes error and should terminate entire script. */
ALTER TABLE dbo.Order2 ADD
A int;
GO
CREATE TABLE dbo.CustomerOrder
(
CustomerID int NOT NULL
, OrderID int NOT NULL
);
GO
COMMIT TRANSACTION;
GO
你可以提出任何的表示工具? – NYSystemsAnalyst 2009-10-29 12:33:45
我在這篇博文中列出了很多:http://is.gd/4H8iZ(我對Red-Gate產品有着豐富的經驗,並且非常推薦它,我沒有太多其他經驗。產品是可比較的,但RG在這裏是根深蒂固的,所以這是我繼續使用的。) – 2009-10-29 13:37:22