|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Développeur Web Inscription : novembre 2007 Messages : 141 ![]() |
Bonjour,
Mon titre doit paraître bizarre, mais c'est tout à fait ça : je ne sais pas combien d'arguments je vais avoir Voilà mon problème : je veux faire une procédure permettant de faire une recherche sur une table (ou une jointure de table peu importe), sur une colonne bien précise, qui est en fait est un type d'objet. J'aimerai pouvoir dire "bah maintenant je veux tous les éléments du type X ou Y (donc pas ceux du type Z)" et après dire "cool, maintenant balance moi ceux de type Z ou A)" etc (typiquement, je coche des case dans un formulaire)... En gros, je dois passer à ma procédure une liste de valeur pour la colonne sur laquelle je filtre. Quelle est la meilleure solution pour réaliser ce type de procédure ? Sous quelle forme passer mes paramètres ? Je pense que je vais devoir regrouper toutes mes valeurs dans un seul paramètre de la procédure, mais de quelle manière ? Note : en plus, c'est encore mieux, je veux deux arguments de ce type dans ma procédure pour filtrer selon deux colonnes Merci d'avance pour votre aide ! |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() |
Bonjour,
Il faut éviter ce genre de choses pour les performances. Mais c'est possible, soit en passant une chaîne de valeurs que tu découpes dans une fonction utilisateur, soit en passant du XML que tu interprètes avec du XQuery dans ta sproc. Pour XQuery, j'ai écrit un article d'introduction : http://rudi.developpez.com/sqlserver/tutoriel/xquery/
__________________
Rudi Bruchez Consultant indépendant modélisation, administration, optimisation, formation, solutions MS SQL Server et informatique libre. MCDBA, MCITP, MCT, SCJP2 - http://www.babaluga.com/ Articles et tutoriels : http://rudi.developpez.com/ LIVRE : Optimiser SQL Server |
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Développeur Web Inscription : novembre 2007 Messages : 141 ![]() |
Merci rudib ! Je me doute bien qu'au niveau performance, ça doit pas être le mieux, mais je ne vois pas trop d'autres solutions pour cette fonctionnalité... (si quelqu'un voit une autre méthode, je prends
Pour tes deux solutions, j'avais pensé à la première, mais je ne connaissais pas XQuery (merci pour ton tuto, je vais regarder !). Niveau performance, quelle méthode est la meilleure ? Niveau esthétique, je trouve que le XML est un peu mieux peut-être, mais au niveau du programme qui appel la procédure, ça sera peut-être plus complexe... |
|
|
00
|
|
|
#4 |
|
Membre actif
![]() Inscription : juin 2006 Messages : 161 ![]() |
Moi j'opterais pour le découpage d'un paramètre varchar qui contient tous tes paramètres.
@+ |
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Développeur Web Inscription : novembre 2007 Messages : 141 ![]() |
@Zabriskir: oui, c'est peut-être le plus simple !
Mais je ne vois pas trop comment écrire le bout de code qui dirait "mes valeurs sont séparées par des ; dans cette chaîne, pour chacune des valeurs, je voudrais que tu fasses ça : blablabla". J'suis pas une pro en T-SQL, quelqu'un aurait un exemple ? J'ai l'impression qu'on est un peu limité au niveau de la manipulation de chaîne et des traitements en boucle... |
|
|
00
|
|
|
#6 | ||
![]() ![]() Alexandre ChemlaConsultant en Business Intelligence Inscription : février 2006 Messages : 1 782 ![]() |
Tu as une fonction qui permet de découper une ligne de valeurs en plusieurs ligne d'1 valeur.
Sûrement pas très propre mais très pratique. Code :
|
||
|
|
00
|
|
|
#7 |
|
Nouveau Membre du Club
![]() Développeur Web Inscription : novembre 2007 Messages : 141 ![]() |
Merci pour la fonction Jinroh77
Finalement, je me suis dit quitte à formater ma chaîne à passer en paramètre, autant la formater directement dans un format exploitable ! Donc, comme je pouvais m'en sortir avec un "colonne in (...)" dans ma requête de sélection, j'ai décider de formater le paramètre directement sous forme de liste utilisable en SQL soit un truc du genre : Comme ça pas besoin de faire un lourd traitement dans la procédure ! Merci encore pour vos réponses |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com