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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 : 44
    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
    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 averti
    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
    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
    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.

  5. #5
    Membre averti
    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
    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
    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

+ 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