bonjour à tous
j'ai créer deux tables : T_CONTRAT et T_APPARTEMENT avec là syntaxe suivante:
create table T_APPARTEMENT (ID_appart int primary key identity (1,1), num_appart varchar (10), type_appart varchar (20), niveau varchar (3), ID_im int foreign key references T_IMMEUBLE (ID_im), etat_appart varchar (6))
create table T_CONTRAT (ID_contrat int primary key identity (1,1), date_sign datetime, mois_prise_effet datetime, nb_mois_avance smallint, nb_mois_consigne smallint, date_resiliation datetime, ID_appart int foreign key references T_APPARTEMENT (ID_appart), ID_loc int foreign key references T_LOCATAIRE (ID_loc))
la propriété "etat_appart" dois prendre les valeurs 'libre' et 'occupé'.
je veux que lorsqu'on signe un contrat, l'attribut de la propriété etat_appart de la maison concernée soit automatiquement "occupé et si on résilie un contrat, ce attribut redevienne "libre".
j'ai pensé donc à la création d'un déclencher dont voici la syntaxe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| create trigger mise_a_jr_etat_appart
on T_CONTRAT
for insert, update
as
declare @n int
declare @m datetime
set @n= (select ID_appart from T_CONTRAT where ID_contrat= (select max(ID_contrat)from T_CONTRAT))
set @m =(select date_resiliation from T_CONTRAT where ID_contrat= (select max(ID_contrat) from T_CONTRAT))
if @m is null
update T_APPARTEMENT
set etat_appart='OCCUPE'where ID_appart=@n
else
update T_APPARTEMENT
set etat_appart='LIBRE'where ID_appart=@n |
Quand je fais un nouvel enregistrement, tout marche bien.
Par contre si je fais une modification, je n'ai pas le résultat escompté.
C'est normal, car le récupère max(ID_contrat) dans mon instruction.
J'aimerais récupérer l'ID_contrat de l'enregistrement courant. Malheureusement je ne connais pas la syntaxe.
Comment puis-je récupérer ID_contrat pour une modification?
Y a t-il une autre manière de procéder pour renseigner automatiquement l'état de mon appartement?
Merci d'avance de votre aide
Partager