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

MS SQL Server Discussion :

procedure dans un trigger


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    etudiant
    Inscrit en
    Mai 2010
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : etudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 222
    Points : 104
    Points
    104
    Par défaut procedure dans un trigger
    bonsoir ,
    j'ai plusieurs tables mais je dois dans une table faire une contrainte sur une table "contrat" car je dois limiter a un locataire un nombre de logement a 3 , vu que chaque logement a un seul contrat et chaque contrat un locataire j'ai joué sur la clé etrangére du locataire qui se trouve sur la table contrat pour faire la contrainte mais je ne sais pas pourquoi cela ne marche pas voici mes 2 codes :
    procedure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    create procedure nbre_logement (@num_locataire int)
    as 
     IF( select COUNT(num_locataire) from contrat where num_contrat=@num_locataire) > 3  
     begin
     print 'vous ne pouvez pas depasser 3 logements'
     return
     end
    et trigger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    create trigger controle_nbr_log on contrat
    for insert as
    begin
    declare @loc as int;
    declare @nbr as int;
     
    set @loc =(select num_locataire from inserted )
     set @nbr= nbre_logement(@loc )
     
    end
    et l'erreur aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Msg*195, Niveau*15, État*10, Procédure*controle_nbr_log, Ligne*9
    'nbre_logement' n'est pas une option nom de fonction intégrée reconnue.
    MERCI , je suis debutant

  2. #2
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    Ne créez pas une PROCEDURE mais une fonction scalaire vous retounant un bit à 1 si c'est bon par exemple...


    Avec celle-ci pas besoin d'un TRIGGER au passage... vous pouvez ajoutez une contrainte CHECK directement sur la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CHECK (dbo.FN_CHECK_NBRE_LOGEMENT(num_locataire)=1)

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 883
    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 883
    Points : 53 073
    Points
    53 073
    Billets dans le blog
    6
    Par défaut
    Plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE FUNCTION F_NBR_LOGEMENT (@num_locataire int)
    RETURNS INT
    AS 
    BEGIN
       RETURN (SELECT *
              FROM   dbo.contrat 
               WHERE  num_contrat=@num_locataire);
    END
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ALTER TABLE dbo.contrat 
       ADD CONSTRAINT CK_LIMITE_CONTRAT
       CHECK (dbo.F_NBR_LOGEMENT(num_contrat) <= 3);
    A +

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Dans le code de SQLPro, remplacez * par COUNT(*)

    @++

Discussions similaires

  1. appel de procedure dans un trigger
    Par madimane dans le forum Oracle
    Réponses: 3
    Dernier message: 14/03/2006, 06h59
  2. RAZ GENERATOR dans un trigger
    Par kase74 dans le forum SQL
    Réponses: 2
    Dernier message: 08/09/2003, 18h43
  3. select dans un trigger sous Postgresql
    Par kastor_grog dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/09/2003, 17h00
  4. [PostgreSQL] Refus de STATEMENT dans un trigger
    Par alex2205 dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/03/2003, 12h51
  5. Reprendre une procedure dans une autre ?
    Par Poisson Rouge dans le forum Langage
    Réponses: 3
    Dernier message: 17/07/2002, 22h51

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