SQL SERVER - Update compliqué ...

Messages postés
10
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
21 mai 2010
- - Dernière réponse : o06
Messages postés
10
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
21 mai 2010
- 25 févr. 2010 à 10:12
Bjr le Forum,

je vous soumets brièvement mon souci:
une table f_article avec un champ ar_codefiscal que je voudrais mettre à jour à partir des valeurs des champs d'une autre table majcodes.
dans la table f_article pour chaque champ reference il y a un champ ar_codefiscal, dans la table majcodes il y a pour chaque champ reference un champ codefiscal. je voulais pour chaque champ f_article.ar_codefiscal vide le mettre à jour avec la valeur du champ majcodes.codefiscal avec comme 'clé' f_article.ar_ref = majcodes.reference.
ouf...

j'ai donc essayé :
update dbo.f_article 
set ar_codefiscal =
(
select majcodes.codefiscal from majcodes inner join f_article on majcodes.reference = f_article.ar_ref
)
where ar_codefiscal =''


l'analyseur de requêtes me retourne me msg d'erreur suivant :
Serveur : Msg 512, Niveau 16, État 1, Ligne 1
La sous-requête a retourné plusieurs valeurs. Cela n'est pas autorisé quand la sous-requête suit =, !=, <, <= , >, >= ou quand elle est utilisée en tant qu'expression.
L'instruction a été arrêtée.

je vois bien le souci mais je n'arrive pas à trouver de solution à mon petit niveau (me frotte a SQL server très ponctuellement)

auriez vous une piste SVP ?
Merci
a+
Afficher la suite 

3 réponses

Messages postés
39
Date d'inscription
mardi 21 décembre 2004
Statut
Membre
Dernière intervention
15 février 2010
0
Merci
Bonjour,

update dbo.f_article
set ar_codefiscal = codefiscal
from majcodes
inner join f_article on majcodes.reference = f_article.ar_ref
where ar_codefiscal ='' OR ar_codefiscal IS NULL

ATTENTION au champs vide ou NULL

Ref : http://msdn.microsoft.com/en-us/library/ms177523.aspx
Commenter la réponse de hymnuade
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
23
0
Merci
Salut,

Il est possible d'utiliser un curseur pour mettre à jour
les valeurs au fur et à mesure.

Mets les curseurs ne sont pas recommandés (mémoire trop importante)

Un while dans une proecure peut resoudre surement le probleme.

http://sqlpro.developpez.com/cours/sqlserver/MSSQLServer_avoidCursor/

http://www.sql-server-performance.com/articles/per/operations_no_cursors_p1.aspx
Commenter la réponse de nhervagault
Messages postés
10
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
21 mai 2010
0
Merci
Hello,

Merci pour vos réponses.
Je m'en suis sorti avec une requête trouvée au fil de mes recherches sur le net.
C'est à mon avis pas très propre (encore une fois je suis un novice en SQL Manager) mais ça marche.
Je dis pas très propre car elle "grise" les volets diagramme et grille. Seul le volet SQL reste opérationnel.

Ça se rapproche un peu de ce que propose hymnuade. Par contre je ne connais pas les curseurs. Et je vais jeter un œil aux liens pour voir ce que propose nhervagault (punaise vous avec de ces pseudos, c'est pas humain)

Encore merci pour votre aide.
A+

La requête :
UPDATE    f_article
SET              f_article.ar_codefiscal = majcodes.codefiscal
FROM         f_article, majcodes
WHERE     f_article.ar_codefiscal '' AND f_article.ar_ref majcodes.reference
Commenter la réponse de o06