begin process at 2012 05 26 20:20:36
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

SQL Server, MSDE, SQL Express

 > 

Procédures Stockées

 > 

Procedure de recherche


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Procedure de recherche

mardi 9 juin 2009 à 18:51:02 | Procedure de recherche

hardzip

Bonjour tout le monde
Je suis actuellement entrain de mettre en place un formulaire de recherche avec asp et  .NET et j'ai un probleme qui me bloque depuis maintenant 2 jours.

Le principe de ma procedure stockée est la suivante:
elle recupére les données saisies dans les textbox et suivant le champs elle les compare avec des données de la table.
Avec les champs de type "varchar" pas de probleme j'utilise des "LIKE" et ça marche super bien mais concernat les int et autres champs numerique impossible d'y mettre des "LIKE" ce quii fait que les champs numerique doivent OBLIGATOIREMENT etre renseignés pour espérer que la requete nous renvoi un resultat

toute aide serai la bienvenue vu que le travail qui m'est confié est assez urgent.
 Ci dessous le code de ma procedure stockée

[code]

ALTER PROCEDURE

[dbo].[psRecherche]

@PrenomClient

varchar(60) = '',

@NomClient

varchar(60)= '',

@CNI_Client bigint = null,

@Service

int = null,

@NumTelClient

int = null,

@CategorieReq

int = null,

@TypeReq

int = null,

@StatutReq

int = null

AS

BEGIN

SELECT Prenom_Client, Nom_Client, NumeroTel_Client, CNI_Client, ID_TypeService, ID_Requete, DateCreation, Adresse_Client, ID_Categorie, ID_Type, ID_Statut

FROM

Requete

WHERE

(CNI_Client = @CNI_Client)

AND (Prenom_Client LIKE '%'+@PrenomClient+'%')

AND (Nom_Client LIKE '%'+@NomClient+'%')

AND (NumeroTel_Client = @NumTelClient)

AND (ID_TypeService = @Service)

AND (ID_Categorie = @CategorieReq)

AND (ID_Type = @TypeReq)

AND (ID_Statut = @StatutReq)

END

[code]

Merci

mardi 9 juin 2009 à 19:00:39 | Re : Procedure de recherche

hardzip

Je precise que j'aimerais effectuer des recherche sans pour autant etre obligé de renseigner tous les champs et quand même avoir des resultats suivant les infos que j'ai fournies
mercredi 24 juin 2009 à 18:02:57 | Re : Procedure de recherche

nivsql

Tu as plusieurs problemes dans cette procédure.

Le premier est que quoi qu'il arrive :  Champ = NULL renverra TOUJOURS FAUX ! donc si une seule de tes valeurs numérique n'est pas renseignée ta requete ne retournera AUCUNE données.

Tu dois donc veiller Soit a ce que tes valeurs numériques soient obligatoirement renseignées (ce que tu semble ne pas vouloir d'apres la description de ton probleme).

Tu vas donc devoir changer ton fusil d'epaule et intégrer tous tes parametres en char ou varchar et SURTOUT ne pas les initialiser a null.

Une fois cela fait tu vas devoir abuser de la fonction CAST tel que :

SELECT Prenom_Client, Nom_Client, NumeroTel_Client, CNI_Client, ID_TypeService, ID_Requete, DateCreation, Adresse_Client, ID_Categorie, ID_Type, ID_Statut
FROM Requete
WHERE (Cast(CNI_Client as VARCHAR) Like '%'+@CNI_Client+'%')
AND (Prenom_Client LIKE '%'+@PrenomClient+'%')
AND (Nom_Client LIKE '%'+@NomClient+'%')
AND (Cast(NumeroTel_Client as VARCHAR) like '%'+ @NumTelClient +'%')
AND (Cast(ID_TypeService as VARCHAR) like '%'+@Service+'%')
AND (Cast(ID_Categorie as VARCHAR) like '%'+ @CategorieReq +'%')
AND (Cast(ID_Type as VARCHAR) like '%'+ @TypeReq +'%')
AND (Cast(ID_Statut as VARCHAR) like '%' + @StatutReq +'%')

Je te le dis tout de suite, un dev de chez moi me fait un truc comme ca je le crucifie sur place. Cette methode est TRES SALE et tu a toutes les chances d'écrouler les performances de ta requete sur des volumetrie importante car en utilisant le cast de cette maniere tu empechera le moteur SQL d'utiliser le moindre index.

La maniere propre est de garder tes numérique et de construir ta requete dynamiquement en fonction des champs que tu as en entré.

ta procédure devrais resembler a ca (je suis pas sur a 100% de la synthaxe):


CREATE PROCEDURE [dbo].[psRecherche]
@PrenomClient varchar(60) = '',
@NomClient varchar(60)= '',
@CNI_Client bigint = null,
@Service int = null,
@NumTelClient int = null,
@CategorieReq int = null,
@TypeReq int = null,
@StatutReq int = null
AS
BEGIN
DECLARE dynreq varchar(8000)
SET @dynreq ='SELECT Prenom_Client, Nom_Client, NumeroTel_Client, CNI_Client, ID_TypeService, ID_Requete, DateCreation, Adresse_Client, ID_Categorie, ID_Type, ID_Statut'
SET @dynreq = @dynreq +' FROM Requete WHERE (Prenom_Client LIKE ''%''+@PrenomClient+''%'')AND (Nom_Client LIKE ''%''+@NomClient+''%'')'
IF @CNI_Client IS NOT NULL
SET @dynreq = @dynreq + ' AND (CNI_Client = @CNI_Client)'
IF @NumTelClient IS NOT NULL
SET @dynreq = @dynreq + ' AND (NumeroTel_Client = @NumTelClient)'
IF @Service IS NOT NULL
SET @dynreq = @dynreq + ' AND (ID_TypeService = @Service)'
IF @CategorieReq IS NOT NULL
SET @dynreq = @dynreq + ' AND (ID_Categorie = @CategorieReq)'
IF @TypeReq IS NOT NULL
SET @dynreq = @dynreq + ' AND (ID_Type = @TypeReq)'
IF @StatutReq IS NOT NULL
SET @dynreq = @dynreq + ' AND (ID_Statut = @StatutReq)'
execute(@dynreq)
END
mercredi 24 juin 2009 à 19:22:55 | Re : Procedure de recherche

nivsql

Voila un exemple de la solution propre qui marche sur la base exemple de microsoft, adventureWorks :


PROCEDURE [dbo].[psRecherche]
@PrenomClient as varchar(60),
@NomClient as varchar(60),
@CNI_Client as bigint
AS
DECLARE @dynreq varchar(8000)
BEGIN
SET @dynreq ='SELECT *'
SET @dynreq = @dynreq +' FROM Person.Contact WHERE (FirstName LIKE ''%''+'''+@PrenomClient+'''+''%'')AND (LastName LIKE ''%''+'''+@NomClient+'''+''%'')'
IF @CNI_Client IS NOT NULL
SET @dynreq = @dynreq + ' AND (ContactID = '+cast(@CNI_Client as varchar)+')'
PRINT @dynreq
execute(@dynreq)
END


Tu peux t'en inspirer pour retravailler ta proc.


Cette discussion est classée dans : int, and, client, id, procedure


Répondre à ce message

Sujets en rapport avec ce message

Probleme avec une requete [ par deadstar2 ] Bonjour à tous, Je n'ai pas un excellent niveau en sql, j'aimerais faire appel à vos connaissances pour une requete dont je n'arrive pas à obtenir ce Faire plusieurs if dans un procedure stockee [ par chris81 ] bonjour,comment puis je faire pour verifier plusiseurs if dans la meme procedure stockee c'est a direif not exist(SELECT Id FROM...) et if not exists( Selectionner les lignes dont un champ apparait plusieurs fois [ par bluebird_29200 ] Bonjour a tous ! sur la table reservations client_id  |  transaction_id je cherche a faire ressortir les client_id dont le nombre d'apparitions dep probleme de AND , = [ par sheorogath ] bonjour a tousvoila m'etant mis un peu a la programmation de base de donnees en java j'ai commence le sqlj'ai trois tablele point commun de c'est tabl set d'une variable retourne null [ par bootchoz ] salut !qu'est-ce qui ne va pas dans ma procédure ?quelqu'un peut m'aider ? pourquoi @id_pers vaut null apres le set ?merci d'avance...CREATE PROCEDURE conversion varchar en int [ par Boulet1 ] Bonjour je travaille sur SQL server et je cherche a transformer des champs varchar en int mais je ne trouve pas la solution.Quand je procède comme cel Peut-on insérer des valeurs dans une table de jointure à l'aide d'un trigger? [ par gero123 ] Bonjour à tous,J'aimerais vous soumettre une question qui me bloque depuis un certain temps.Au nieau de mon MCD, j'ai une entité Client avec pour iden traduction d'une requtte sql [ par 071714016 ] j'ai un problème avec une version SQL 4.0 il ne reconnait pas "not in (select" "select * from chat where recepteur='$idlogin' and etat_r!=1 and emeteu Nombre de requête imbriquer max??? [ par Polack77 ] Bonjour , Je développe acculement une appli (en VB) qui gère une base de données. Mon problème est que je dois être compatible avec un maximum de SGBD probleme de groupe by sql server [ par wally88 ] Bonjour voila j'ai une galere avec Group by en sql de sql serveur Avec sql serveur il faut apprement mettre tout les champs que l'on veux dans un cert


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,265 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales