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 :

Déclencheur: La requête renvoie plus d'une valeur et d'autres questions


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Déclencheur: La requête renvoie plus d'une valeur et d'autres questions
    Nom : DB.png
Affichages : 369
Taille : 80,4 Ko
    Bonjour,
    l'architecture de ma base de données est comme sur l'image jointe à ce message.
    Voilà le trigger que j'ai créé:

    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
    22
    23
    24
    25
    CREATE TRIGGER [dbo].[chargeAZero] 
    ON [dbo].[situations_final] 
    after INSERT 
    AS 
      BEGIN 
          SET nocount ON 
     
          UPDATE sfinal 
          SET    charge = 00 
          FROM   inserted i 
                 INNER JOIN situations_final sfinal 
                         ON i.referencepiece = sfinal.referencepiece 
                            AND i.ancienposte = sfinal.ancienposte 
                            AND i.numerophase = sfinal.numerophase 
                            AND i.datestrategie = sfinal.datestrategie 
          /*and i.Datecadence=sfinal.Datecadence*/ 
          WHERE  (SELECT sfinal.nouveauposte 
                  FROM   situations_final sfinal 
                         INNER JOIN inserted i 
                                 ON i.referencepiece = sfinal.referencepiece 
                                    AND i.ancienposte = sfinal.ancienposte 
                                    AND i.numerophase = sfinal.numerophase 
                                    AND i.datestrategie = sfinal.datestrategie) IS 
                 NULL 
      END
    Le message d'erreur est toujours le même : The subquery returns more than 1 value... Pourtant, je me suis efforcé à suivre tous les conseils que j'ai trouvés un peu partout. La preuve, tous mes autres déclencheurs marchent bien.
    Je tiens également à préciser que j'insère manuellement des lignes sur la table 'situations' et un autre déclencheur m'insère des lignes et je veux donc que le déclencheur posté ici mettre le champ 'charge' à 0 lorsque 'nouveauposte' est NULL.

    Ma deuxième question est la suivante: Comme vous l'aurez remarqué sur ma base de données, j'ai une table nommée 'Nomenclatures' avec 3 champs: pièce mère, pièce fille et quantité.
    Pour mieux vous expliquer, je vous donne un exemple:
    Pour faire une armoire, on a besoin de 4 tiroirs. Pour faire un tiroir, on a besoin de 3 m² de plaques en bois (je dis n'importe quoi). Donc pour faire une armoire, on a besoin de 4*3=12m² de plaques de plaques en bois.
    Et donc, dans ma table, j'ai des des données ainsi réparties:
    pièce mère: A pièce fille:B quantité:2
    pièce mère: B pièce fille:C quantité:5
    Je veux avoir un résultat comme ça :
    A 1(une pièce de A) B 2 C 10(=2*5).

    Ma troisième et dernière question: Est-il possible de ne rendre seul un déclencheur récursif? J'en ai pas mal, certains sur la même table et je veux rendre un déclencheur spécifique récursif.

    Merci à vous.

    Cordialement !

  2. #2
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    La première question
    La partie...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    WHERE  (SELECT sfinal.nouveauposte 
                  FROM   situations_final sfinal 
                         INNER JOIN inserted i 
                                 ON i.referencepiece = sfinal.referencepiece 
                                    AND i.ancienposte = sfinal.ancienposte 
                                    AND i.numerophase = sfinal.numerophase 
                                    AND i.datestrategie = sfinal.datestrategie) IS NULL
    la sous-requête ne doit donner une seule valeur simple et qui est comparée à NULL; sinon la requête ne peut comparer un ensemble de valeurs à NULL.
    A la place vous pouvez utiliser...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    WHERE  not exists(SELECT sfinal.nouveauposte 
                  FROM   situations_final sfinal 
                         INNER JOIN inserted i 
                                 ON i.referencepiece = sfinal.referencepiece 
                                    AND i.ancienposte = sfinal.ancienposte 
                                    AND i.numerophase = sfinal.numerophase 
                                    AND i.datestrategie = sfinal.datestrategie)
    Pour la deuxième question, j'ai pas pris le temps nécessaire pour le comprendre
    La troisième question porte une confusion: trigger récursive ou commune à plusieurs tables?. Dans tous les cas, il faut utiliser une procédure qui tu appelles dans le ou les trigger(s).
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  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 760
    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 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par abdessmz Voir le message
    Nom : DB.png
Affichages : 369
Taille : 80,4 Ko
    Bonjour,
    l'architecture de ma base de données est comme sur l'image jointe à ce message.
    J'aime autant vous dire tout de suite que si vous gardez un tel modèle, je ne donne pas chères des performances de votre base une fois en production... En effet, avoir des clefs de table composée de multiples colonnes, de surcroit hiérarchique et qui plus est de type "chaines de caractères" est le plus sûr moyen d'obtenir des performances catastrophique et qui plus est de finir dans des impasses si votre base doit évoluer.

    Reconsidérez URGEMMENT votre modèle en faisant en sorte de n'avoir pour clef primaires que des colonnes autoincrémentées et remplacez vos anciennes clefs primaires par des contraintes d'unicité !

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

Discussions similaires

  1. Procédure stockée et sous requete qui retourne plus d'une valeur
    Par paintbox dans le forum Développement
    Réponses: 5
    Dernier message: 21/11/2012, 17h42
  2. [AC-2007] Requête en fonction d'une valeur d'un champ
    Par jouclar dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 26/10/2010, 16h40
  3. passer plus qu'une valeur entre pages *.aspx
    Par yrifka dans le forum ASP.NET
    Réponses: 6
    Dernier message: 16/08/2010, 09h09
  4. Recherche d'une liste dont le produit de ses membres s'approche le plus d'une valeur
    Par sm1z2000 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 11/05/2009, 16h05
  5. requête access (test d'une valeur entrée par l'utilisateur)
    Par ben5985 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 30/11/2006, 08h39

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