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
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Par défaut Problème avec un trigger...
    Voilà mon problème : J'ai le trigger suivant (qui ne fait pas ce que je veux )

    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
    CREATE TRIGGER Titre_Delete
    ON Titres AFTER DELETE
    AS
    BEGIN
        DECLARE @ordremin INT;
       DECLARE @ordremax INT;
       DELETE FROM Titre_Profil WHERE idtitre IN (select idtitre from deleted);
       DELETE FROM Titre_Frequence WHERE idtitre IN (select idtitre from deleted);
       SELECT @ordremin=ordre+1
       FROM deleted;
       SELECT @ordremax=max(ordre)
       FROM Titres;
       WHILE @ordremin>=@ordremax
       BEGIN
          UPDATE Titres
          SET ordre=ordre-1
          WHERE ordre=@ordremin;
          SET @ordremin=@ordremin+1;
       END
    END
    Le but de ce trigger était de supprimer toutes les associations avec un titre lors de sa suppression (aucun problème sur cette partie )

    Mais aussi de faire remonter tous les numéros d'ordre jusqu'à celui supprimé (et là ça beugue ^^) (Code en bleu)

    genre j'ai la table:

    ID:ordre
    1:1
    2:2
    3:3
    10:4
    12:5

    Et je veux supprimer le titre 2, je devrais avoir

    ID:ordre
    1:1
    3:2
    10:3
    12:4

    Et je me retrouve avec

    ID:ordre
    1:1
    3:3
    10:4
    12:5

    La loose :-/
    Si quelqu'un pouvait donc m'aider...

  2. #2
    Membre très actif
    Avatar de jpelaho
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Avril 2006
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 120
    Par défaut
    La partie

    WHILE @ordremin>=@ordremax

    ne devrait elle pas être

    WHILE @ordremin<=@ordremax

    ???

  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 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Votre trigger est inepte car si vous supprimez plusieurs lignes à la fois, comme il n'est exécuté qu'une fois, les résultats seront complétenent faux !!!!

    En effet, essayez :
    DELETE FROM TITRE WHERE ID IN (2, 4)

    Dans un trigger il ne doit JAMAIS y avoir de variables locales, sauf à utiliser un CURSOR.
    Le mieux étant de réaliser son trigger uniquement sous forme de code ensembliste, c'est à dire exclusivement de requêtes SQL.

    Postez le SQL DDL de vos tables et un jeu d'essais afin que je puisse vous aider plus en avant, en respectant ceci :
    http://www.developpez.net/forums/showthread.php?t=944

    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
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Par défaut
    Citation Envoyé par jpelaho
    La partie

    WHILE @ordremin>=@ordremax

    ne devrait elle pas être

    WHILE @ordremin<=@ordremax

    ???
    Très très très pertinent (si c'est ça je me flingue X_x)... en plus ça a l'air d'être ça... :-/

    Et pour info : on peut utiliser des variables dans les trigger comme dans toute fonction PL/SQL ^^

    merci beaucoup (je me flingue )

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

Discussions similaires

  1. problème avec les triggers
    Par jakcam dans le forum Administration
    Réponses: 4
    Dernier message: 04/03/2008, 11h37
  2. Problème avec un trigger
    Par fayerne dans le forum PL/SQL
    Réponses: 2
    Dernier message: 13/01/2008, 00h36
  3. Réponses: 4
    Dernier message: 27/11/2007, 15h32
  4. probléme avec un trigger
    Par sofiane1111 dans le forum Oracle
    Réponses: 4
    Dernier message: 14/06/2007, 11h17
  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