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 :

Mise en place d'un trigger [2014]


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Mise en place d'un trigger
    Bonjour à toutes et à tous,
    Je suis novice dans le domaine de la programmation sur MS SQL.
    Je dois mettre en place un déclencheur/trigger qui devra effectuer une mise à blanc d'un champ si 3 critères sont respectés.
    Je m'explique, dans le cadre d'une gestion commerciale qui gère des documents de stocks, des documents d'achats et des documents des ventes, le premier critère est le type de document, dans mon cas je dois me focaliser uniquement sur les documents des ventes (1er critère, domaine = 0).
    Puis parmi ces documents, je dois prendre en compte que les documents de type facture (2ème critère, type = facture).
    Parmi cette sélection, seuls les documents à comptabiliser sont à prendre en compte (3ème critère, statut = à comptabiliser).
    Important, pendant cette opération, il ne faut pas que cela ralentisse le système ni les autres utilisateurs travaillant sur les documents de stocks, sur les documents des achats ou, sur les autres documents des ventes.
    Si les 3 conditions sont réunies alors, je dois mettre " à blanc " un champ sinon, aucune opération n'est requise.
    J'ai besoin de votre expérience et de vos lumières afin de m'expliquer la logique de sélection à utiliser et, si vous connaissez quelques bouts de code à insérer, je vous en serais reconnaissant.
    Merci de votre compréhension et pour votre temps.
    Bien cordialement.
    Fred

  2. #2
    FMJ
    FMJ est déconnecté
    Membre averti
    Profil pro
    tutu
    Inscrit en
    Octobre 2003
    Messages
    416
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : tutu

    Informations forums :
    Inscription : Octobre 2003
    Messages : 416
    Points : 356
    Points
    356
    Par défaut
    S'il s'agit d'une utilisation professionnelle, plutôt que de faire des bêtises qui pourraient avoir de fâcheuses conséquences, je te recommanderais soit de faire une formation avancée, soit de passer par un professionnel. Ce que tu demandes n'est pas compliqué à faire pour quelqu'un qui maîtrise un peu Transact SQL. Mais pour quelqu'un qui ne connaît pas du tout, c'est une tout autre paire de manches !

  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 768
    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 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Un tel déclencheur ne comporte que 2 instructions que voici :

    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
    CREATE TRIGGER nom_trigger
    ON nom_table
    FOR INSERT, UPDATE
    AS
    IF NOT UPDATE(laColonne1) AND 
       NOT UPDATE(laColonne2) AND 
       NOT UPDATE(laColonne3) RETURN;
    UPDATE nom_table
    SET LeChamp = NULL
    WHERE laColonne1 = valeurA 
      AND laColonne2 = ValeurB
      AND laColonne3 = ValeurC
      AND LcColonneClef IN (SELECT LaColonneClef 
                            FROM   inserted);
    GO
    Lisez mon livre pour en savoir plus !

    Nom : Couverture livre SQL server Eyrolles.jpg
Affichages : 413
Taille : 105,0 Ko

    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/ * * * * *

  4. #4
    Candidat au Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par FMJ Voir le message
    S'il s'agit d'une utilisation professionnelle, plutôt que de faire des bêtises qui pourraient avoir de fâcheuses conséquences, je te recommanderais soit de faire une formation avancée, soit de passer par un professionnel. Ce que tu demandes n'est pas compliqué à faire pour quelqu'un qui maîtrise un peu Transact SQL. Mais pour quelqu'un qui ne connaît pas du tout, c'est une tout autre paire de manches !
    Merci pour votre réponse mais, sachez avant de passer en prod., j'ai un serveur de test...

  5. #5
    Candidat au Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Un tel déclencheur ne comporte que 2 instructions que voici :

    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
    CREATE TRIGGER nom_trigger
    ON nom_table
    FOR INSERT, UPDATE
    AS
    IF NOT UPDATE(laColonne1) AND 
       NOT UPDATE(laColonne2) AND 
       NOT UPDATE(laColonne3) RETURN;
    UPDATE nom_table
    SET LeChamp = NULL
    WHERE laColonne1 = valeurA 
      AND laColonne2 = ValeurB
      AND laColonne3 = ValeurC
      AND LcColonneClef IN (SELECT LaColonneClef 
                            FROM   inserted);
    GO
    Lisez mon livre pour en savoir plus !

    Nom : Couverture livre SQL server Eyrolles.jpg
Affichages : 413
Taille : 105,0 Ko

    A +
    Merci pour cette réponse, puis-je vous envoyer mon code SVP afin que vous puissiez me corriger ?

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

Discussions similaires

  1. Erreur 1064 mise en place de trigger
    Par SebastianPx dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 02/04/2009, 19h11
  2. [AD]Mise en place de Active Directory
    Par guiguisi dans le forum Windows Serveur
    Réponses: 9
    Dernier message: 29/07/2004, 08h50
  3. [C#] Mise en place d'un site multilingue
    Par regbegpower dans le forum ASP.NET
    Réponses: 6
    Dernier message: 19/03/2004, 19h15
  4. mise en place serveur web intranet
    Par gui4593 dans le forum Installation
    Réponses: 7
    Dernier message: 01/01/2004, 18h18
  5. Mise en place d'index....??
    Par liv dans le forum Requêtes
    Réponses: 6
    Dernier message: 18/12/2003, 11h04

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