Vous êtes sur la page 1sur 2

Gestion de transactions

Tous ordre SQL du DML est une transaction (SELECT INSERT, UPDATE, DELETE).

Parce que SQL Server fonctionne en "AUTOCOMMIT", une combinaison de différents

ordres nécessite la pose explicite d'une transaction.

Ceci se fait par l'instruction BEGIN TRANSACTION et doit être terminé soit par un

ROLLBACK, soit par un COMMIT.

Une transaction peut être anonyme ou nommée. De toute façon SQL Server lui attribue un

identifiant interne unique.

Exemple simple.

Il s'agit de commander 3 unités de l’article « Art714 » pour le client 123, s'il y a bien de

quantité disponible de cet article !

Solution :

BEGIN TRANSACTION

-- reste t-il d’article pour cette commande?

IF NOT EXISTS(SELECT * FROM Article WHERE coderat='Art714' AND qtiteStock > 3)

THEN BEGIN ROLLBACK TRANSACTION RETURN END -- décompte des articles vendus

UPDATE Article SET qtiteStock = qtiteStock 3 WHERE coderat='Art714'

IF (@@ERROR <> 0) OR (@@ROWCOUNT = 0)

GOTO ROLLBACK_ON_ERROR

-- génération d'une ligne commande

INSERT into lignecommande (numcde, codeart, qtitecdee) VALUES (12,'Art714', 3)

IF (@@ERROR <> 0) OR (@@ROWCOUNT = 0)

GOTO ROLLBACK_ON_ERROR

-- validation de l'ensemble

COMMIT TRANSACTION

RETURN

-- si branchement à l'étiquette d'erreur alors ROLLBACK

ROLLBACK_ON_ERROR: ROLLBACK TRANSACTION

Exercice N°1:

Ecrire une transaction qui permet d’augmenter les prix des articles inférieurs à 150 de 5% ?

Afficher le message « Augmentation effectuée avec succès »

Exercice N°2:

Ecrire une transaction qui permet d’augmenter le salaire des vendeurs

inférieurs à 7000 de 10% à condition que la moyenne des salaires après augmentation ne

dépasse pas 6500 ? Afficher le message « Augmentation effectuée avec succès »