SQL SERVER - Update compliqué ...

o06 Messages postés 10 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 21 mai 2010 - 2 févr. 2010 à 17:46
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+
A voir également:

3 réponses

hymnuade Messages postés 39 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 15 février 2010
15 févr. 2010 à 16:17
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
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
23 févr. 2010 à 23:05
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
0
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
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
0
Rejoignez-nous