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 :

Trigger et héritage


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Par défaut Trigger et héritage
    Bonjour à tous,

    j'ai deux table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TABLE [dbo].[Tb_Client](
    	[Id] [int] IDENTITY(100,1) NOT NULL primary key,
    	[Nom] [char](32) NOT NULL,
    	[Prenom] [varchar](25) NOT NULL,
    	[Ville] [varchar](32) NOT NULL,
    	[Tel] [nvarchar](10) NOT NULL,
    	[Cp] [int] NOT NULL,
    	[Complement] [text] NULL);
     
    CREATE TABLE [dbo].[Tb_Entreprise](
    	[Id] [int] NOT NULL REFERENCES Tb_Client([Id]),
    	[Taux] [int] NULL);
    En gros j'ai un client qui peut etre une entreprise et dans ce cas la on renseigne le taux.

    Mon problème se situe sur un trigger que je voudrais mettre en place avec instead of. Lorsque j’envoie ma requête, si le client n'est pas une entreprise alors le taux aura comme valeur -1 sinon il sera positif et inférieur à 100.

    Voici comment je pensais faire mon trigger :

    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 TrgInsertClient 
       ON  [Tb_Client]
       instead of INSERT
    AS 
    BEGIN
    DECLARE 
        @taux int;
    SELECT @id = Id, 
    	@taux = tx
    FROM inserted;
     
    IF (@taux != -1) 
    BEGIN
       insert into Tb_client select Id, Nom,Prenom,VIlle,Tel,Cp,Complement from inserted;
       insert into Entreprise select Id, taux from inserted;
    END
    ELSE
    BEGIN
       insert into Tb_client select Id, Nom,Prenom,VIlle,Tel,Cp,Complement from inserted;
    END
    Le probleme c'est que je n'arrive même pas a éxécuter le trigger de plus je pense qu'il va pas trouver le taux. C'est mon premier

    Pouvez vous m'aider svp?

    Merci d'avance.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour


    En effet, il y a plusieurs problèmes dans votre trigger :

    1/ vous allez chercher la valeur de la colonne tx dans la pseudo table INSERTED, alors que la table sur laquelle se trouve le trigger n'a pas de colonne tx. Si vous voulez faire ainsi, vous pouvez créer une vue qui effectue la jointure entre vos deux tables, placer le trigger sur cette vue, et inserer dans la vue.

    2/ Si vous insérez plusieurs lignes en même temps, votre trigger ne fonctionnera pas comme prévu : il comparera un seul taux parmi tous ceux insérés et insera ensuite ce taux pour toutes les lignes de la pseudo table INSERTED.supprimez les variables, et mettez la condition dans la requête d'insertion.

    3/il me semble qu'il manque un END à la fin (erreur de copier coller ?)

    4/ vous tentez visiblement d'inserer l'identitifant dans la table client alors que cette colonne est en autoincrément


    Quelle est votre version de SQL Server ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Par défaut
    Bonsoir aieeeuuuuu,

    tout d'abord merci pour la réponse.

    J'avais pas pensé à la vue en effet et je testerai ça demain en vous tenant au courant ^^

    pour le taux a vrai dire c’était une idée et je savais pas du tout si ça allait marcher.

    Pour le end, en effet c'est une erreur de copier/ coller :p

    puis pour l'id de la table client, que dire sauf que j'ai fais le boulet

    Merci bien en tout cas, je teste ça demain et je vous tiens au courant pour le cas ou quelqu'un aurait la même question.

    Bonne soirée a tous et merci encore aieeeuuuuu!!

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 8
    Par défaut
    Bonjour tout le monde,

    donc aieeeuuuuu tu avais raison, j'ai créé une vue et le tour était joué.
    Merci beaucoup pour l'aide ^^.

    Cordialement Azirius.

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

Discussions similaires

  1. [postgre] Trigger sur vue - héritage
    Par lynnaryas dans le forum PostgreSQL
    Réponses: 10
    Dernier message: 13/04/2012, 14h31
  2. Déclencheur (trigger) insertion avec l'héritage
    Par provisoire80 dans le forum Développement
    Réponses: 10
    Dernier message: 17/08/2009, 13h52
  3. Trigger Pl/SQL : héritage
    Par magma13 dans le forum PL/SQL
    Réponses: 1
    Dernier message: 04/03/2008, 11h30
  4. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

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