Avec mes scripts de mise à niveau de base de données, j'ai généralement un seul long script qui apporte les modifications nécessaires à cette version de base de données. Cependant, si une instruction échoue à mi-chemin du script, elle laisse la base de données dans un état incohérent. Comment puis-je faire de l'ensemble du script de mise à niveau une opération atomique? J'ai essayé juste d'encapsuler toutes les déclarations dans une transaction, mais cela ne fonctionne pas. Même avec SET XACT_ABORT ON, si une instruction échoue et annule les transactions, le reste des instructions continue. Je voudrais une solution qui ne nécessite pas que j'écrive IF @@ TRANCOUNT> 0 ... avant chaque déclaration. Par exemple:Scripts de mise à niveau atomique
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
Pouvez-vous suggérer un quelconque desdits outils ? – NYSystemsAnalyst
Je liste beaucoup dans ce billet de blog: http://is.gd/4H8iZ (J'ai une vaste expérience avec le produit Red-Gate, et je le recommande fortement, je n'ai pas beaucoup d'expérience avec les autres. le produit est comparable, mais RG est retranché ici, donc c'est ce que je continue à utiliser.) –