|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Inscription : décembre 2008 Messages : 63 ![]() |
Bonjour
Je souhaiterais savoir s'il est conseillé de faire 2 INSERT dans 2 tables différentes dans une boucle WHILE. Code :
|
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour,
Il est plutôt conseillé d'éviter ce genre de boucles. Vous n'avez pas mis le code entier, mais visiblement le but est d’insérer plusieurs fois (un nombre prédéfini) la même ligne... préférez insérer 1 fois N lignes que N fois 1 ligne... |
|
|
00
|
|
|
#3 | |||
|
Membre chevronné
![]() ![]() Inscription : juillet 2006 Messages : 1 194 ![]() |
Citation:
Votre query deviendrait, grosso-modo : Code :
|
|||
|
|
10
|
|
|
#4 | ||
![]() ![]() ![]() |
Une solution proposée par l'actuel responsable de la rubrique SQL Serveur que j'ai aimé.
Code :
__________________
Découvrez la FAQ de MS SQL Server. La chance accorde ses faveurs aux esprits avertis ! |
||
|
|
10
|
|
|
#5 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
oui,
voire aussi utiliser n'importe quelle table dont le nombre de lignes sera toujours plus grand que @Nombre_Copies (sinon, faire un produit cartésien) : Sur le principe : Code SQL :
|
||
|
|
00
|
|
|
#6 | ||
|
Nouveau Membre du Club
![]() Inscription : décembre 2008 Messages : 63 ![]() |
Vous avez tout à fait raison.
Effectivement la proc stockée gère ligne par ligne. Comment pourrais - je en un insert, sélectionner les bonnes lignes. Ci-dessous le code en entier : Code :
|
||
|
|
00
|
|
|
#7 |
![]() ![]() ![]() |
Si vous êtes sous SQL Serveur 2000 et 2005, vous pouvez passer en paramètre un tableau de paramètre via XML tandis qu'une méthode plus élégante existe sous SQL Serveur 2008, les TVP (Table Valued Parameters).
C'est à vous de voir.
__________________
Découvrez la FAQ de MS SQL Server. La chance accorde ses faveurs aux esprits avertis ! |
|
|
00
|
|
|
#8 | |
|
Nouveau Membre du Club
![]() Inscription : décembre 2008 Messages : 63 ![]() |
Citation:
![]() Exemple : Ligne 1 dans Table 1 et Table 2 Ligne 2 dans Table 1 et Table 2 Ligne 3 dans Table 1 et Table 2 |
|
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Insérer dans deux tables différentes = deux ordres INSERT (y a-t-il des contraintes sur vos tables, sinon vous pouvez jouer sur la clause OUTPUT, mais il me semble préférable de faire 2 insert)
par contre, vous pouvez insérer toutes vos lignes avec un seul ordre SQL. à partir de votre exemple, ce serait donc : Insertion Ligne 1, ligne 2 et ligne 3 dans table 1 Insertion Ligne 1, ligne 2 et ligne 3 dans table 2 donc sans boucle. |
|
|
00
|
|
|
#10 | |
|
Nouveau Membre du Club
![]() Inscription : décembre 2008 Messages : 63 ![]() |
Citation:
Merci encore pour vos réponse. ![]()
|
|
|
|
00
|
|
|
#11 |
![]() ![]() ![]() |
Effectivement ca ne change rien au principe de banir du procédure au profit de l'ensembliste.
__________________
Découvrez la FAQ de MS SQL Server. La chance accorde ses faveurs aux esprits avertis ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com