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 :

Erreur exécution update


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    France
    Inscrit en
    Juillet 2016
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : France
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 75
    Par défaut Erreur exécution update
    Bonjour,

    Je rencontre une erreur lors de l’exécution d'une requête sous sql server.

    Lorsque j'exécute la requete suivante le résultat est conforme à mes attentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    update T_MATRICULE_PIECE set BOOL_VIERGE_1 ='T',DATE_VIERGE_1 = CURRENT_TIMESTAMP  where NUM_PIECE_M in 
     
    (select mat.NUM_PIECE_M,mat.DATE_VIERGE_1
    from t_mvt mvt
    	inner join t_piece piece on mvt.CLE_PIECE = piece.CLE_PIECE
    	inner join t_ligne_bt lbt on lbt.NUM_LIGNE_BT = mvt.CLE_LIEN
    	inner join t_bt bt on bt.NUM_BT = lbt.CLE_BT
    	inner join t_ui ui on ui.NUM_UI = bt.CLE_UI
    	inner join T_MATRICULE_PIECE mat on mat.NUM_PIECE_M = lbt.CLE_ELEMENT
     
    where mvt.DATE_CREATION BETWEEN DATEADD(week,-1,CURRENT_TIMESTAMP) AND CURRENT_TIMESTAMp
    and lbt.TYPE_LIGNE_BT = 'M')
    Lorsque j'ajoute la clause suivante à mon where
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    And mat.DATE_VIERGE_1 is NULL
    Le problème suivant apparaît
    Msg 116, Level 16, State 1, Line 16
    Only one expression can be specified in the select list when the subquery is not introduced with EXISTS
    .
    Je ne comprend pas en quoi le fait de rajouter une clause supplémentaire modifie le renvoit de la sous requête...?

    Cordialement,

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Es-tu vraiment certain que la requête que tu nous présentes s'exécute sans erreur ?
    Parce que le message met en évidence l'erreur qui se trouve ici, où tu compares une colonne avec deux colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ...where NUM_PIECE_M in 
    (select mat.NUM_PIECE_M,mat.DATE_VIERGE_1...
    .
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre confirmé
    Homme Profil pro
    France
    Inscrit en
    Juillet 2016
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : France
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 75
    Par défaut
    Effectivement le code n'est pas le bon... Je sélectionne bien une colonne en face d'une autre

    Version corrigée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    update T_MATRICULE_PIECE set BOOL_VIERGE_1 ='T',DATE_VIERGE_1 = CURRENT_TIMESTAMP  where NUM_PIECE_M in 
     
    (select mat.NUM_PIECE_M
    from t_mvt mvt
    	inner join t_piece piece on mvt.CLE_PIECE = piece.CLE_PIECE
    	inner join t_ligne_bt lbt on lbt.NUM_LIGNE_BT = mvt.CLE_LIEN
    	inner join t_bt bt on bt.NUM_BT = lbt.CLE_BT
    	inner join t_ui ui on ui.NUM_UI = bt.CLE_UI
    	inner join T_MATRICULE_PIECE mat on mat.NUM_PIECE_M = lbt.CLE_ELEMENT
     
    where mvt.DATE_CREATION BETWEEN DATEADD(week,-1,CURRENT_TIMESTAMP) AND CURRENT_TIMESTAMp
    and lbt.TYPE_LIGNE_BT = 'M')

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 : 22 010
    Billets dans le blog
    6
    Par défaut
    Votre requête n'a pas d'erreur.

    Vous pouvez d'ailleurs la récrire comme suit :

    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
    update mat
    set    BOOL_VIERGE_1 ='T',
           DATE_VIERGE_1 = CURRENT_TIMESTAMP  
    from   t_mvt mvt
    	   inner join t_piece piece 
    	       on mvt.CLE_PIECE = piece.CLE_PIECE
    	   inner join t_ligne_bt lbt 
    	       on lbt.NUM_LIGNE_BT = mvt.CLE_LIEN
    	   inner join t_bt bt 
    	       on bt.NUM_BT = lbt.CLE_BT
    	   inner join t_ui ui 
    	       on ui.NUM_UI = bt.CLE_UI
    	   inner join T_MATRICULE_PIECE mat 
    	       on mat.NUM_PIECE_M = lbt.CLE_ELEMENT
    where  mvt.DATE_CREATION BETWEEN DATEADD(week,-1,CURRENT_TIMESTAMP)
                                 AND CURRENT_TIMESTAMp
      and  lbt.TYPE_LIGNE_BT = 'M'
    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/ * * * * *

  5. #5
    Membre confirmé
    Homme Profil pro
    France
    Inscrit en
    Juillet 2016
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : France
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 75
    Par défaut
    Bonjour,

    Ce n'est pas la requête envoyé précédemment qui me pose problème.. C'est quand je rajoute à cette même requête la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    And mat.DATE_VIERGE_1 is NULL
    En plus clair c'est celle ci :
    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
    update mat
    set    BOOL_VIERGE_1 ='T',
           DATE_VIERGE_1 = CURRENT_TIMESTAMP  
    from   t_mvt mvt
    	   inner join t_piece piece 
    	       on mvt.CLE_PIECE = piece.CLE_PIECE
    	   inner join t_ligne_bt lbt 
    	       on lbt.NUM_LIGNE_BT = mvt.CLE_LIEN
    	   inner join t_bt bt 
    	       on bt.NUM_BT = lbt.CLE_BT
    	   inner join t_ui ui 
    	       on ui.NUM_UI = bt.CLE_UI
    	   inner join T_MATRICULE_PIECE mat 
    	       on mat.NUM_PIECE_M = lbt.CLE_ELEMENT
    where  mvt.DATE_CREATION BETWEEN DATEADD(week,-1,CURRENT_TIMESTAMP)
                                 AND CURRENT_TIMESTAMp
      and  lbt.TYPE_LIGNE_BT = 'M'
      And mat.DATE_VIERGE_1 is NULL
    Cf message 1

  6. #6
    Membre confirmé
    Homme Profil pro
    France
    Inscrit en
    Juillet 2016
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : France
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2016
    Messages : 75
    Par défaut
    Bonjour,

    Il semblerait que la nouvelle écriture solutionne mes problèmes ! Merci.

    Cordialement,

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/10/2005, 10h09
  2. Erreur d'Update
    Par kedig dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/08/2005, 16h25
  3. Réponses: 3
    Dernier message: 25/01/2005, 12h31
  4. Erreur instruction "UPDATE"
    Par Mathouxxx dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/07/2004, 14h02
  5. [debutante] erreur requete update
    Par LineLe dans le forum ASP
    Réponses: 5
    Dernier message: 12/09/2003, 13h05

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