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 :

Problème avec un TRIGGER


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Août 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2013
    Messages : 41
    Points : 15
    Points
    15
    Par défaut Problème avec un TRIGGER
    Bonjour à tous,

    Voilà mon souci :
    J'ai une base de données dans laquelle j'insère des données (F_COMPTET) et il faudrait que ma Base BDD_LAURENCE se mette à jour en même temps sur un seul champ (en l'occurence CT_Num).
    Je me dis "Pourquoi ne pas utiliser un trigger !"
    Mais ça marche pas...
    Voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TRIGGER [dbo].[NvCli] 
       ON  [dbo].[F_COMPTET] 
       AFTER INSERT
       AS
    DECLARE
    		@CT_Num nvarchar(17) 
    BEGIN
    		IF EXISTS (SELECT * FROM F_COMPTET where F_COMPTET.REPRESENTANT like '%PIVERT%')
     
    	SET NOCOUNT ON;
        INSERT INTO [dbo].[BDD_LAURENCE]
    VALUES(@CT_Num) 
    END

    Si quelqu'un a une idée... merci !

  2. #2
    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 : 42
    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,

    Il y a plusieurs erreurs dans votre déclencheur :

    - de manière générale, la déclaration de la variable se fait après le BEGIN
    - SET NOCOUNT ON est une option de session qui permet de ne pas retourner à l'application cliente le nombre de lignes affectées par chaque instruction, ce qui minimise le trafic réseau (surtout quand le code invoqué est appelé très fréquemment)

    - Votre déclencheur n'est pas ensembliste, ce qui vous conduira inévitablement à des problèmes, que j'expose ici. Vous devez saisir que SQL, et par extension T-SQL (dialecte SQL de Microsoft) est un langage ensembliste (on traite les données dans leur ensemble, et non pas par itération) et déclaratif (on exprime le résultat que l'on souhaite obtenir, pas la façon dont il sera obtenu). Je comprends que c'est une gymnastique mentale un peu compliquée lorsqu'on code des applications qui sont supportées par des bases de données, mais il est capital que vous compreniez cette différence

    Enfin, le vocabulaire que vous employez me semble inexact :

    J'ai une base de données dans laquelle j'insère des données (F_COMPTET) et il faudrait que ma Base BDD_LAURENCE se mette à jour en même temps sur un seul champ (en l'occurence CT_Num).
    Il me semble que vous confondez :

    - une base de données, qui peut être composée de plusieurs tables et modules de code SQL (vues, procédures stockées, déclencheurs, fonctions, ...)
    - une table décrit une entité logique suivant ses attributs que l'on retrouve en colonnes (je simplifie volontairement).

    F_COMPTET évoque un nom de table, alors que BDD_LAURENCE évoque une base de données.
    Ceci fait que je ne comprend pas ce que vous cherchez à faire exactement.

    Si vous travaillez avec deux bases de données pour le code de ce déclencheur, il faudra peut-être écrire INSERT INTO BDD_LAURENCE.dbo.uneTable ...

    Pouvez-vous expliciter à partir de mes remarques ?

    @++

  3. #3
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Août 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2013
    Messages : 41
    Points : 15
    Points
    15
    Par défaut
    Autant pour moi...
    F_COMPTET et BDD_LAURENCE sont toutes les 2 des tables. Celles-ci appartiennent à la Base de données BD_GESTION.

    Désolé de cette erreur de syntaxe

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    @CT_Num n'a jamais de valeur assignée.

    À quoi doit correspondre CT_Num ?
    Il est important que vous répondiez à ceci, car pour l'instant votre trigger est pensé pour une seule ligne et si vous insériez plus d'une ligne à la fois, vous auriez un bug.
    Most Valued Pas mvp

  5. #5
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Août 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2013
    Messages : 41
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    @CT_Num correspond au N° client de la ligne qui sera ajoutée dans F_COMPTET (colonne CT_Num dans F_COMPTET qui a le meme nom dans la table BDD_LAURENCE)

    Le but étant de copier instantanément dans BDD_LAURENCE le CT_Num qui est ajouté dans F_COMPTET

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Ça n'explique pas le rapport avec %PIVERT%.

    Sur base d'une supposition sur la nature de ce rapport :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TRIGGER [dbo].[NvCli] 
       ON  [dbo].[F_COMPTET] 
       AFTER INSERT
       AS
    BEGIN
        SET NOCOUNT ON;
        INSERT INTO [dbo].[BDD_LAURENCE]
        SELECT
            CT_Num
        FROM inserted
        WHERE REPRESENTANT LIKE '%PIVERT%'
    END
    Most Valued Pas mvp

  7. #7
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Août 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2013
    Messages : 41
    Points : 15
    Points
    15
    Par défaut
    le like '%PIVERT%' correspond au filtre du nom du representant pour lequel l'insert doit se faire. La colonne REPRESENTANT est dans F_COMPTET.
    en gros, l'insert doit se faire uniquement si le Representant est '%PIVERT%'.

    seulement, voilà le message obtenu :

    Msg*213, Niveau*16, État*1, Procédure*NvCli, Ligne*7
    Le nom ou le numéro de colonne des valeurs fournies ne correspond pas à la définition de la table.

    Je précise que je suis sous MS SQL Server 2008

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Pouvez-vous poster le script de creation de la table BDD_LAURENCE ?
    Most Valued Pas mvp

  9. #9
    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
    C'est une base SAGE LIGNE 100...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TRIGGER [dbo].[NvCli] 
       ON  [dbo].[F_COMPTET] 
       AFTER INSERT
       AS
    BEGIN
        SET NOCOUNT ON;
        INSERT INTO [dbo].[BDD_LAURENCE](CT_NUM)
        SELECT
            CT_Num
        FROM inserted
        WHERE REPRESENTANT LIKE '%PIVERT%'
    END
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  10. #10
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Août 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2013
    Messages : 41
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par iberserk Voir le message
    C'est une base SAGE LIGNE 100...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TRIGGER [dbo].[NvCli] 
       ON  [dbo].[F_COMPTET] 
       AFTER INSERT
       AS
    BEGIN
        SET NOCOUNT ON;
        INSERT INTO [dbo].[BDD_LAURENCE](CT_NUM)
        SELECT
            CT_Num
        FROM inserted
        WHERE REPRESENTANT LIKE '%PIVERT%'
    END
    En effet, Sage Ligne 100

  11. #11
    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
    BDD_LAURENCE.
    Ce nom de base me dit quelque chose, ou travaillez vous?

    N'aurez-je pas fait un audit chez vous pour le compte de PRODWARE?
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Citation Envoyé par iberserk Voir le message
    C'est une base SAGE LIGNE 100...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TRIGGER [dbo].[NvCli] 
       ON  [dbo].[F_COMPTET] 
       AFTER INSERT
       AS
    BEGIN
        SET NOCOUNT ON;
        INSERT INTO [dbo].[BDD_LAURENCE](CT_NUM)
        SELECT
            CT_Num
        FROM inserted
        WHERE REPRESENTANT LIKE '%PIVERT%'
    END
    Ha, ok.

    Bien, bien... ligne 100 en plus.

    Hé bien, quelle affaire !
    Content que la question de savoir si c'était ou non une base JERONIMAX FORK 4 soi résolue.

    Tiens, j'ai le sentiment curieux qu'on a oublié quelque chose.
    Most Valued Pas mvp

  13. #13
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Août 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2013
    Messages : 41
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par iberserk Voir le message
    BDD_LAURENCE.
    Ce nom de base me dit quelque chose, ou travaillez vous?

    N'aurez-je pas fait un audit chez vous pour le compte de PRODWARE?
    Non, pas d'audit par PRODWARE. Je travaille sur Chartres

  14. #14
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Août 2013
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : Alimentation

    Informations forums :
    Inscription : Août 2013
    Messages : 41
    Points : 15
    Points
    15
    Par défaut MERCI
    Merci beaucoup pour vos réponses à tous, ça fonctionne !!!

  15. #15
    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
    Hé bien, quelle affaire !
    Remarque toute aussi intéressante que la mienne...
    Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
    MCTS Database Development
    MCTS Database Administration

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

Discussions similaires

  1. Problème avec un trigger
    Par fayerne dans le forum PL/SQL
    Réponses: 2
    Dernier message: 13/01/2008, 00h36
  2. Réponses: 4
    Dernier message: 27/11/2007, 15h32
  3. probléme avec un trigger
    Par sofiane1111 dans le forum Oracle
    Réponses: 4
    Dernier message: 14/06/2007, 11h17
  4. Problème avec un trigger...
    Par nasgektw dans le forum Développement
    Réponses: 3
    Dernier message: 28/04/2006, 17h41
  5. [T-SQL] problème avec un trigger
    Par karine77 dans le forum Adaptive Server Enterprise
    Réponses: 3
    Dernier message: 26/09/2005, 10h45

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