IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration SQL Server Discussion :

ID de l'enregistrement courant


Sujet :

Administration SQL Server

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 205
    Points : 78
    Points
    78
    Par défaut ID de l'enregistrement courant
    Bonjour,

    j'ai un petit souci pour faire un enrégistrement automatique dans l'une de mes table de ma base de donnée et j'aimerais bien avoir votre aide.

    Dans ma base de données, j'ai deux tables: T_APPARTEMENT et T_CONTRAT crée avec les syntaxes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    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))
    et


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    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))

    Lorsqu'on signe un contrat,a propriété de etat_appart de l'appartement conserné prend la valeur "OCCUPE" et lorsqu'on résilie le contrat, l'état redevient "LIBRE".



    Pour pouvoir le faire, j'ai créé un déclencheur avec la syntaxe suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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, ce déclencheur fonctionne normalement.
    Par contre, lorsque je fais une mise à jour sur un enregistrement, cela ne fonctionne pas.

    En fait je sais pas récupérer l'ID_appart de l'appartement sur lequel on effectue la mise à jour.

    Aussi, j'aimerais avoir votre aide.

    Y a t-il une manière de procéder?

    Merci d'avance de votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    bonjour

    2 remarques sur ton trigger :

    Tu dois utiliser les tables inserted et deleted, spécifiques aux triggers, qui contiennent les enregistrements insérés (inserted) et ceux qui sont supprimés (deleted). Dans le cas de d'un UPDATE les 2 tables sont renseignées avec l'ancien dans la table deleted et le nouveau dans inserted.

    cf. http://msdn.microsoft.com/fr-fr/library/ms191300.aspx

    De plus ton trigger ne fonctionne que pour une seul ligne. Si plusieurs contrats sont insérés le trigger ne mettra à jour qu'une seule ligne.

    Au final le trigger pourrait se résumer à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TRIGGER mise_a_jr_etat_appart
    ON T_CONTRAT
    FOR INSERT, UPDATE
     
    AS
     
    update 	t_appartement
    set	etat_appart=case when b.date_resiliation is null then 'OCCUPE' else 'LIBRE' end
    from 	t_appartement a inner join inserted b on (a.ID_appart = b.ID_appart)
    Je ne l'ai pas testé donc à vérifier .....
    Emmanuel T.

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 205
    Points : 78
    Points
    78
    Par défaut
    Merci kagemaru

    Je test et je te fais signe

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 205
    Points : 78
    Points
    78
    Par défaut
    Le code marche parfaitement.

    Merci de ton aide, c'est cool

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Points : 1 216
    Points
    1 216
    Par défaut
    cool

    ps : faudrait déplacer ce post dans la partie DEV.
    Emmanuel T.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. DBGrid récupérer les valeurs de l'enregistrement courant
    Par bob_sapp dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/09/2014, 07h56
  2. Enregistrement courant après refresh [cas particulier]
    Par say dans le forum Bases de données
    Réponses: 8
    Dernier message: 02/08/2005, 15h59
  3. Effacer l'enregistrement courant?
    Par juliea dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/12/2004, 10h48
  4. Trigger sur l'enregistrement courant
    Par fifi2000ez dans le forum SQL
    Réponses: 4
    Dernier message: 03/08/2004, 21h25
  5. Enregistrement courant RECNO
    Par Chonchon dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/06/2004, 18h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo