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

Développement SQL Server Discussion :

ID de l'enregistrement courant


Sujet :

Développement 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 à tous

    j'ai créer deux tables : T_CONTRAT et T_APPARTEMENT avec là syntaxe suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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))

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

    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, 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

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 782
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 782
    Points : 52 783
    Points
    52 783
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par aldama Voir le message
    Y a t-il une autre manière de procéder pour renseigner automatiquement l'état de mon appartement?
    Il suffit de créer une vue : aucun stockage de cette information n'est nécessaire puisque vous la calculez. Et par principe toute données calculée ne doit JAMAIS être stocké !!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE VIEW V_APPARTEMENT
    AS
    SELECT A.*, CASE 
                   WHEN CURRENT_TIMESTAMP BETWEEN mois_prise_effet AND date_resiliation 
                      THEN 'Occupé'
                   ELSE 'Libre'
                END AS Etat 
    FROM   T_APPARTEMENT AS A
           LEFT OUTER JOIN T_CONTRAT AS C
                ON A.ID_appart = C.ID_appart
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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