|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() aziz amednaghDéveloppeur .NET Inscription : juin 2010 Messages : 18 ![]() |
Bonjour,
est-ce qu'il est possible de faire une requête (procédure stockée) avec comme paramètre une liste de données ? je m'explique : je veux envoyer une liste [a,b,c,d] a une procédure et je veux faire une recherche avec ca, dire au système si mon ID existe dans [a,b,c,d] select * from MaTable where ID exist dans [a,b,c,d] je precise que je travail sur sql server 2005 merci par avance |
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() Développeur informatique Inscription : janvier 2011 Messages : 309 ![]() |
Salut
Oui tu peux avec le mot clé IN Code sql :
SELECT * FROM MaTable WHERE ID IN (a,b,c,d) |
|
|
00
|
|
|
#3 | |
|
Invité de passage
![]() aziz amednaghDéveloppeur .NET Inscription : juin 2010 Messages : 18 ![]() |
non ca passe pas
Citation:
|
|
|
|
00
|
|
|
#4 |
|
Membre expérimenté
![]() Développeur informatique Inscription : janvier 2011 Messages : 309 ![]() |
Bah tu déclares 4 paramètres dans ta procédure,
et tu fais un Code sql :
SELECT * FROM MaTable WHERE ID IN (@param1,@param2,@param3,@param4) dans ta procédure Pour l'appel, Code sql :
exec ta_procédure @param1=a,@param2=b,@param3=c,@param4=d Tu saisis le principe ? |
|
|
00
|
|
|
#5 | |
|
Invité de passage
![]() aziz amednaghDéveloppeur .NET Inscription : juin 2010 Messages : 18 ![]() |
oui mais non lol
en fait y aura presque entre 1 et 2000 paramètres ca dépends des cases que l'utilisateur a coché dans un treeview (c#) Citation:
|
|
|
|
00
|
|
|
#6 | ||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
C'est un problème récurrent et il existe trois façons de le résoudre : - soit vous faites un INSERT dans une table à deux colonnes, réservée à cet effet : l'une est un identifiant de type uniqueidentifier, généré par la procédure stockée avec la fonction NEWSEQUENTIALID(), et vous stockez toutes les valeurs dans cette colonne. Ensuite vous faites la jointure sur cette table en filtrant par l'identifiant - soit vous utilisez des paramètres de type TABLE (TVP dans la littérature), qui sont plus stricts. Mais comme ce sont des variables de type TABLE côté SQL Server, aucune statistique n'est maintenue sur une telle table (elle est stockée dans TempDB). Donc l'estimation de cardinalité pour un grand nombre de valeurs est souvent faux à moins que vous terminiez la requête par OPTION (RECOMPILE). Dans ce dernier cas, si la requête est exécutée très fréquemment, vous allez augmenter la consommation de CPU. - Soit vous utilisez une fonction SQL de dépouillement de la chaîne, et vous faites une jointure sur la fonction table. Vous aurez le même problème d'estimation de cardinalité que ci-dessus. Code :
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||
|
00
|
|
|
#7 | |||
|
Invité de passage
![]() aziz amednaghDéveloppeur .NET Inscription : juin 2010 Messages : 18 ![]() |
supeeeer merci Nicolas pour toutes ses explications
![]() Citation:
|
|||
|
|
00
|
|
|
#8 | |
|
Membre Expert
![]() |
A nico:
Citation:
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com