데이터베이스 업그레이드 스크립트를 사용하면 일반적으로 해당 데이터베이스 버전에 필요한 변경 사항을 적용하는 긴 스크립트가 하나만 있습니다. 그러나 하나의 명령문이 스크립트의 중간에서 실패하면 데이터베이스가 일관성없는 상태로 둡니다.원자 업그레이드 스크립트
전체 업그레이드 스크립트를 하나의 원자 적 조작으로 만들려면 어떻게해야합니까? 모든 트랜잭션 문을 래핑하는 시도했지만 작동하지 않습니다. 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
나는이 블로그 포스트에 많은 것을 적었습니다 : http://is.gd/4H8iZ (저는 Red-Gate 제품에 대한 풍부한 경험을 가지고 있으며 그것을 많이 추천합니다.) 다른 것들에 대해서는 많은 경험이 없습니다. 제품은 비슷하지만 RG는 여기에 뿌리 내리고 있으므로 계속 사용하고 있습니다.) –