|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre éclairé
![]() Yoann Inscription : septembre 2009 Messages : 304 ![]() |
Bonjour,
je travaille sur une procedure stockée Code :
par exemple @var_perimetre_user peut avoir la valeur suivante ou Code :
((range_name_product + variety_name_product LIKE N'%danone%') OR (range_name_product + variety_name_product LIKE N'%actimel%') OR ....(range_name_product + variety_name_product LIKE N'%Dany%')) Dans l'attente de vos reponse Nasty
__________________
Nous sommes tous des chercheurs en puissance : Decrypthon. Aidons la recherche! Code :
'TODO : trouver une signature mieux que celle la |
||
|
|
00
|
|
|
#2 | ||
|
Membre chevronné
![]() Analyste - Programmeur Inscription : mai 2006 Messages : 712 ![]() |
Code :
__________________
Aucune aide par MP, utilisez le forum. |
||
|
|
00
|
|
|
#3 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
En effet le conseil de J0r_x est le bon mais il aurait pu être plus détaillé et contient une erreur. Il vous faut construire la chaîne de requête au fil de l'eau en fonction de la valeur des paramètres : s'il est NULL, vous n'ajoutez rien à la chaîne de requête, sinon vous lui ajoutez un filtre. Ajoutez WHERE 1 = 1 à la fin de la clause FROM / JOIN et vous n'aurez plus qu'à le faire suivre par autant de AND qu'il est nécessaire. Ensuite ce prédicat n'en est pas un : Code :
AND (@var_perimetre_user IS NULL OR @var_perimetre_user) Mais cela n'aidera pas à n'avoir qu'un minimum de plans de requête pour un jeu de paramètres particulier. Avec l'EXEC, SQL Server garde bien sûr le plan de requête en cache, mais comme il conserve les valeurs littérales sans les paramétrer automatiquement, il est fort probable que votre plan ne soit jamais réutilisé : ce sera avec le même jeu de paramètres valués avec des différentes, mais pas avec la procédure stockée système sp_executeSQL. Il en va de même pour la liste des paramètres, que vous devez construire au fil de l'eau. Est-ce que vous employez des caractères non-latins dans vos paramètres (c'est à dire des caractère provenant des alphabets autres que l'alphabet latin, comme le Chinois, le Japonais, le Thaï, l'Hébreu, le Cyrillique, l'Arabe, ...) ? Parce que si ce n'est pas le cas il vaut mieux stocker vos données en varchar, ce qui vous permet de n'utiliser qu'un seul octet par caractère (ASCII), mais ne supporte que les caractères latins et les chiffres. En nvarchar, vous utilisez Unicode, qui occupe deux octets par caractère, mais peut stocker tout caractère, et bien sûr les chiffres. Le type text est déprécié depuis SQL Server 2005, qui l'a remplacé par varchar(max), bien plus simple à manipuler : en fait, comme toute chaîne. ntext a été remplacé par nvarchar(max), et image par varbinary(max). Chacun de ces types permet de stocker 2GB de données, donc 1 milliard et des poussières de caractères en nvarchar(max). Si vous ne voyez pas comment faire, re-postez. @++
__________________
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
|
|
|
#4 | ||||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
OK, voilà (presque tout) le code :
Code :
Je vous conseille d'utiliser celle d'Adam Machanic qui fonctionne parfaitement. Si ce sont des entiers, mettez la colonne au type int. Sinon mettez le type qui convient, qui doit être varchar ou nvarchar. Pour utiliser la fonction CLR, il vous faut passer votre base de données en "digne de confiance" : Code :
Code :
Ensuite vous pouvez créer la fonction CLR. Si cela ne vous tente pas (et c'est un tort), vous pouvez trouver des fonction split() en T-SQL pur facilement. @++
__________________
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
|
|
|
#5 |
|
Membre éclairé
![]() Yoann Inscription : septembre 2009 Messages : 304 ![]() |
Ok je vous remercie pour ces reponses, je vais mettre en application
Et si ca marche, un probleme de plus resolu grace a developpez.com et a ses membres et pour repondre a vos questions concernant les types de caracteres, le type text, je n'y peut rien, la base sur laquelle je travaille a été concu ainsi et je n'ai pas la possibilité de modifier pour rester a jour Nasty
__________________
Nous sommes tous des chercheurs en puissance : Decrypthon. Aidons la recherche! Code :
'TODO : trouver une signature mieux que celle la |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com