1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| CREATE TRIGGER affect_mat
ON SALLE
FOR INSERT
AS
DECLARE
@noSalle int,
@typeSalle int,
@nbPlaces int,
@enTravaux bit,
@nbTypesMat int,
/*Variables pour le curseur*/
@codeMat int,
@nbDefault varchar(10)
BEGIN
SELECT @noSalle = noSalle, @typeSalle = typeSalle, @nbPlaces = nbPlaces, @enTravaux = enTravaux FROM inserted;
IF(@enTravaux = 0) /*On vérifie que la salle est prête à l'emploi*/
BEGIN
/*On déclare un curseur pour parcourir l'ensemble des matériels à installer*/
DECLARE curs_matAffect CURSOR FOR
SELECT codeMat, nbDefault FROM AFFECTER WHERE codeType = @typeSalle;
OPEN curs_matAffect
FETCH NEXT FROM curs_matAffect INTO @codeMat, @nbDefault
WHILE(@@FETCH_STATUS = 0)
BEGIN
IF(@nbDefault = 'nbPlaces')
BEGIN
INSERT INTO INSTALLER VALUES(@codeMat, @noSalle, @nbPlaces);
END
ELSE IF(@nbDefault = 'nbPlaces/2')
BEGIN
INSERT INTO INSTALLER VALUES(@codeMat, @noSalle, @nbPlaces / 2);
END
ELSE
BEGIN
INSERT INTO INSTALLER VALUES(@codeMat, @noSalle, CONVERT(int, @nbDefault));
END
FETCH NEXT FROM curs_matAffect INTO @codeMat, @nbDefault
END
CLOSE curs_matAffect
DEALLOCATE curs_matAffect
INSERT INTO EVENEMENT VALUES (getdate(), 'INSTALLER', 'Installation de matériel dans la salle ' + @noSalle);
END
/*Insertion dans l'historique*/
INSERT INTO EVENEMENT VALUES(getdate(), 'SALLE', 'Création de la salle ' + @noSalle);
END |
Partager