|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 12 ![]() |
Bonjour je suis un peu bloqué quelqu'un aurait une idée de syntaxe pour une fonction qui échange les lignes d'une table quelconque???
avant nom salaire julien 454545 henry 121212 cedrick 1212121 franck 44521321 louis 445454 didier 1454545 nico 8778987 de telle facon qu'on ait julien a la place de nico.on echange les lignes i et j de la table de taille n nom salaire nico 8778987 henry 121212 cedrick 1212121 franck 44521321 louis 445454 didier 1454545 julien 454545 bien le prototype sql dynamique serait Code :
CREATE procedure(@nom_table varchar(200),@ligne_i,@ligne_j)............ Code :
nom salaire rowNumber nico 8778987 1 henry 121212 2 cedrick 1212121 3 franck 44521321 4 louis 445454 5 didier 1454545 6 julien 454545 7 |
||
|
|
00
|
|
|
#2 | ||||||||||||
|
Membre éprouvé
![]() ![]() Hamid MIRAIngénieur développement logiciels Inscription : septembre 2003 Messages : 177 ![]() |
1 - Création de la table exemple Table01
Code SQL :
Code SQL :
Code SQL :
Code SQL :
Dans notre exemple : I=2 et J=5 5 - Requête CTE permettant de permuter les 2 lignes I=2 et J=5 Code SQL :
Code SQL :
Pour ce qui est du SQL Dynamique, je te laisse le le soin de transformer la CTE en SQL Dynamique et de l'intégrer dans ta procédure finale. A+
__________________
"Une idée mal écrite est une idée fausse !" |
||||||||||||
|
|
00
|
|
|
#3 |
|
Membre éprouvé
![]() ![]() Hamid MIRAIngénieur développement logiciels Inscription : septembre 2003 Messages : 177 ![]() |
Attention, il y a une "faille" dans le raisonnement, ou plutôt dans l'exposé du problème concernant l'ordre initial des lignes.
Sous SQL Server, dans une table, il n'y a aucun ordre naturel des lignes, Pour ordonner les lignes avec certitude, le seul moyen est de rajouter une clause ORDER BY explicite. Sans cela l'ordre des lignes est aléatoire suite à un SELECT. Donc entre les 2 étapes : L'étape 3 “Vérification du contenu initial de la table exemple Table01 “ et L'étape 5 "Requête CTE permettant de permuter les 2 lignes I=2 et J=5" , L'ordre initial supposé fixe, et réutilisé ensuite dans la CTE, peut potentiellement changer entretemps. Et la permutation ne fonctionnera pas, ou plutôt, elle sera appliquée à d'autres lignes différentes des lignes I et J que l'on croyait permuter !!! CONCLUSION : Il faut trouver autre chose, plus déterministe, pour classer les lignes. il ne faut pas utiliser ORDER BY (SELECT 1)). Ce dernier établi un ordre non déterministe, non répétitif. Le mieux est de classer les lignes sur la primaire. A+
__________________
"Une idée mal écrite est une idée fausse !" |
|
|
00
|
|
|
#4 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 12 ![]() |
Merci pour tout
Code :
|
||
|
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 12 ![]() |
Bien sur ce n'est qu'une premiere reflexion , toute correction de syntaxe et analyse est la bienvenue , I am new
Code :
|
||
|
|
00
|
|
|
#6 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 12 ![]() |
Finalement j'ai opté ca :
Code sql :
j'ai cette erreur Msg 10734, Level 15, State 1, Procedure Swap_row1, Line 31 Variable assignment is not allowed in a statement containing a top level UNION, INTERSECT or EXCEPT operator comment la contourner? |
||
|
|
00
|
|
|
#7 |
|
Membre éprouvé
![]() ![]() Hamid MIRAIngénieur développement logiciels Inscription : septembre 2003 Messages : 177 ![]() |
Tu réinvente complètement la syntaxe du SQL Dynamique !!!
Tu ne t'es même pas donné la peine de regarder la syntaxe du SQL Dynamique !!! Ci-dessous un lien traitant du SQL Dynamique à lire attentivement avant de poster … http://msdn.microsoft.com/fr-fr/library/ms188001.aspx A+
__________________
"Une idée mal écrite est une idée fausse !" |
|
|
00
|
|
|
#8 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 12 ![]() |
Si si j'ai modifié mes procédures en regardant la syntaxe du sql dynamique , il suffit juste de concaténer mes procedures avec une variable statement
Code sql :
|
||
|
|
00
|
|
|
#9 | ||
|
Invité de passage
![]() Inscription : juillet 2011 Messages : 12 ![]() |
Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com