OVH Cloud OVH Cloud

Procédures stockées : recherche multicritères

6 réponses
Avatar
pascale.eric
Bonjour,

Est-il possible de créer une procédure stockée ayant de 1 à n critères de
recherche ?

Voilà mon cas :
Je dois rechercher des entreprises via un formulaire qui comporte "N"
rubriques saisissables:

Le numéro Siren
La Raison sociale
Le code postal
Le téléphone

etc...


La recherche dans la base peut se faire avec un seul critère saisi ou bien
"N"champs saisis .
Une procédure stockée est-elle possible ?
Dois-je imbriquer plusieurs procédures stockées dans une méta procédure ?

D'avance, merci

Pascale

6 réponses

Avatar
bruno reiter [MVP]
généralement, le plus efficace dans ce cas est de passer les 4 params avec
null quand non utilisé
puis dans la proc en début remplacer les params par début et fin (égaux si
le param est là, mini et maxi sinon)
et mettre between dans le where

br

"pascale.eric" wrote in message
news:cmrdv4$hdd$
Bonjour,

Est-il possible de créer une procédure stockée ayant de 1 à n critères de
recherche ?e cas

Voilà mon cas :
Je dois rechercher des entreprises via un formulaire qui comporte "N"
rubriques saisissables:

Le numéro Siren
La Raison sociale
Le code postal
Le téléphone

etc...


La recherche dans la base peut se faire avec un seul critère saisi ou bien
"N"champs saisis .
Une procédure stockée est-elle possible ?
Dois-je imbriquer plusieurs procédures stockées dans une méta procédure ?

D'avance, merci

Pascale




Avatar
Fred BROUARD
bruno reiter [MVP] a écrit:
généralement, le plus efficace dans ce cas est de passer les 4 params avec
null quand non utilisé
puis dans la proc en début remplacer les params par début et fin (égaux si
le param est là, mini et maxi sinon)
et mettre between dans le where



ou mieux bruno :

WHERE MuméroSiren = COALESCE(@ParamSiren, MuméroSiren)
AND RaisonSociale = COALESCE(@ParamRS, RaisonSociale)
...

Ce sera plus performant...

A +


br

"pascale.eric" wrote in message
news:cmrdv4$hdd$

Bonjour,

Est-il possible de créer une procédure stockée ayant de 1 à n critères de
recherche ?e cas

Voilà mon cas :
Je dois rechercher des entreprises via un formulaire qui comporte "N"
rubriques saisissables:

Le numéro Siren
La Raison sociale
Le code postal
Le téléphone

etc...


La recherche dans la base peut se faire avec un seul critère saisi ou bien
"N"champs saisis .
Une procédure stockée est-elle possible ?
Dois-je imbriquer plusieurs procédures stockées dans une méta procédure ?

D'avance, merci

Pascale










--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
bruno reiter [MVP]
Fred,

théoriquement c'est mieux quoique ça ne résoud pas les params de date et par
ex un nom passé en param comme BROUAR%

mais en pratique, le coalesce peut faire créer un plan d'exécution "pourri",
avec utilisation de mauvais index : dans une proc, j'ai avec du coalesce
1.062.450 reads pour 4906 ms en cpu , avec du between 316 reads pour 16 ms
en cpu

br

"Fred BROUARD" wrote in message
news:#


bruno reiter [MVP] a écrit:
> généralement, le plus efficace dans ce cas est de passer les 4 params


avec
> null quand non utilisé
> puis dans la proc en début remplacer les params par début et fin (égaux


si
> le param est là, mini et maxi sinon)
> et mettre between dans le where

ou mieux bruno :

WHERE MuméroSiren = COALESCE(@ParamSiren, MuméroSiren)
AND RaisonSociale = COALESCE(@ParamRS, RaisonSociale)
...

Ce sera plus performant...

A +

>
> br
>
> "pascale.eric" wrote in message
> news:cmrdv4$hdd$
>
>>Bonjour,
>>
>>Est-il possible de créer une procédure stockée ayant de 1 à n critères


de
>>recherche ?e cas
>>
>>Voilà mon cas :
>>Je dois rechercher des entreprises via un formulaire qui comporte "N"
>>rubriques saisissables:
>>
>>Le numéro Siren
>>La Raison sociale
>>Le code postal
>>Le téléphone
>>
>>etc...
>>
>>
>>La recherche dans la base peut se faire avec un seul critère saisi ou


bien
>>"N"champs saisis .
>>Une procédure stockée est-elle possible ?
>>Dois-je imbriquer plusieurs procédures stockées dans une méta procédure


?
>>
>>D'avance, merci
>>
>>Pascale
>>
>>
>
>
>

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************



Avatar
Fred BROUARD
cela dépend effectivement ou tu place le coalesce. Dans un where tel que celui
là en membre doit de la comparason, il ne devrait pas y avoir trop de problème.

A +

bruno reiter [MVP] a écrit:
Fred,

théoriquement c'est mieux quoique ça ne résoud pas les params de date et par
ex un nom passé en param comme BROUAR%

mais en pratique, le coalesce peut faire créer un plan d'exécution "pourri",
avec utilisation de mauvais index : dans une proc, j'ai avec du coalesce
1.062.450 reads pour 4906 ms en cpu , avec du between 316 reads pour 16 ms
en cpu

br

"Fred BROUARD" wrote in message
news:#


bruno reiter [MVP] a écrit:

généralement, le plus efficace dans ce cas est de passer les 4 params





avec

null quand non utilisé
puis dans la proc en début remplacer les params par début et fin (égaux





si

le param est là, mini et maxi sinon)
et mettre between dans le where



ou mieux bruno :

WHERE MuméroSiren = COALESCE(@ParamSiren, MuméroSiren)
AND RaisonSociale = COALESCE(@ParamRS, RaisonSociale)
...

Ce sera plus performant...

A +


br

"pascale.eric" wrote in message
news:cmrdv4$hdd$


Bonjour,

Est-il possible de créer une procédure stockée ayant de 1 à n critères







de

recherche ?e cas

Voilà mon cas :
Je dois rechercher des entreprises via un formulaire qui comporte "N"
rubriques saisissables:

Le numéro Siren
La Raison sociale
Le code postal
Le téléphone

etc...


La recherche dans la base peut se faire avec un seul critère saisi ou







bien

"N"champs saisis .
Une procédure stockée est-elle possible ?
Dois-je imbriquer plusieurs procédures stockées dans une méta procédure







?

D'avance, merci

Pascale









--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************









--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Med Bouchenafa
L'approche de Bruno et Fred ne permet pas de répondre au cas où l'on veut
faire une recherche avec une valeur de paramètre réellement NULL
Une autre façon classique de traiter ce problème est de construire
dynamiquement la requête dans la procédure stockée

Quelque chose comme ceci
SET @strQL = ' 1 = 1'

IF @param1 IS NULL
SET @strQL = @strSQL + 'AND param1 IS NULL
ELSE IF @param1 <> 'Vide'
SET @strQL = @strSQL + 'AND param1 = @param1


IF @param2 IS NULL
SET @strQL = @strSQL + 'AND param2 IS NULL
ELSE IF @param2 <> 'Vide'
SET @strQL = @strSQL + 'AND param2 = @param2

et à la fin lancer la requêtre par :

EXEC 'SELECT.......FROM....' + @strQL

Bien cordialement
Med Bouchenafa

"pascale.eric" wrote in message
news:cmrdv4$hdd$
Bonjour,

Est-il possible de créer une procédure stockée ayant de 1 à n critères de
recherche ?

Voilà mon cas :
Je dois rechercher des entreprises via un formulaire qui comporte "N"
rubriques saisissables:

Le numéro Siren
La Raison sociale
Le code postal
Le téléphone

etc...


La recherche dans la base peut se faire avec un seul critère saisi ou bien
"N"champs saisis .
Une procédure stockée est-elle possible ?
Dois-je imbriquer plusieurs procédures stockées dans une méta procédure ?

D'avance, merci

Pascale




Avatar
bruno reiter [MVP]
encore une fois Med c'est bien et pratique mais c'est souvent mortel au
niveau des perfs

br

"Med Bouchenafa" wrote in message
news:OxrZW$
L'approche de Bruno et Fred ne permet pas de répondre au cas où l'on veut
faire une recherche avec une valeur de paramètre réellement NULL
Une autre façon classique de traiter ce problème est de construire
dynamiquement la requête dans la procédure stockée

Quelque chose comme ceci
SET @strQL = ' 1 = 1'

IF @param1 IS NULL
SET @strQL = @strSQL + 'AND param1 IS NULL
ELSE IF @param1 <> 'Vide'
SET @strQL = @strSQL + 'AND param1 = @param1


IF @param2 IS NULL
SET @strQL = @strSQL + 'AND param2 IS NULL
ELSE IF @param2 <> 'Vide'
SET @strQL = @strSQL + 'AND param2 = @param2

et à la fin lancer la requêtre par :

EXEC 'SELECT.......FROM....' + @strQL

Bien cordialement
Med Bouchenafa

"pascale.eric" wrote in message
news:cmrdv4$hdd$
> Bonjour,
>
> Est-il possible de créer une procédure stockée ayant de 1 à n critères


de
> recherche ?
>
> Voilà mon cas :
> Je dois rechercher des entreprises via un formulaire qui comporte "N"
> rubriques saisissables:
>
> Le numéro Siren
> La Raison sociale
> Le code postal
> Le téléphone
>
> etc...
>
>
> La recherche dans la base peut se faire avec un seul critère saisi ou


bien
> "N"champs saisis .
> Une procédure stockée est-elle possible ?
> Dois-je imbriquer plusieurs procédures stockées dans une méta procédure


?
>
> D'avance, merci
>
> Pascale
>
>