OVH Cloud OVH Cloud

proc stock

6 réponses
Avatar
hugueslouz
Bopnjour,
j'ai vu une proc stock chez le client :

create proc nom_proc (@var1 datetime() =null, @var2 varchar(20)=null)
as

select col1, col2 from nom_table
where
@var1 is null or @var2='' or @var1=col1
and @var2 is null or @var2='' or @var2=col2


Ma question je ne vois pas l'utilité de tester les variables dans la clause
where et la comparaison devrait se faire col1=@var1 , col2=@var2 pour activer
les index .
est-ce que je me trompe?
comme c'est une proc stock qui existe depuis et utilisée je me pose des
questions avant de proposer de la reecrire.

je vous remercie de votre aide pour m'eclairer.

louz

6 réponses

Avatar
Sylvain Lafontaine
Il s'agit de paramètres facultatifs qui ne doivent pas être utilisés comme
filtre dans la clause Where s'ils n'ont pas été définis par l'usager. Très
couramment utilisée pour les interfaces usagers.

Quant à l'opportunité de réécrire une procédure dont vous ne comprenez pas
tout à fait l'utilité, je me tiendrais loin de ce genre de chose si j'étais
à votre place.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: sylvain aei ca (fill the blanks, no spam please)


"hugueslouz" wrote in message
news:
Bopnjour,
j'ai vu une proc stock chez le client :

create proc nom_proc (@var1 datetime() =null, @var2 varchar(20)=null)
as

select col1, col2 from nom_table
where
@var1 is null or @var2='' or @var1=col1
and @var2 is null or @var2='' or @var2=col2


Ma question je ne vois pas l'utilité de tester les variables dans la
clause
where et la comparaison devrait se faire col1=@var1 , col2=@var2 pour
activer
les index .
est-ce que je me trompe?
comme c'est une proc stock qui existe depuis et utilisée je me pose des
questions avant de proposer de la reecrire.

je vous remercie de votre aide pour m'eclairer.

louz


Avatar
hugueslouz
D'apres ce que j'ai pulire dans optimsation de requetes, est que dans la
clause where doit etre colonne= @vartest pour activer l'index de la colonne
s'il existe. est-ce que dans le sens contraire c'est à dire d'abord @varibale
et puis colonne (Where @variable=colonne ) l'index de la colonne peut etre
activer.


"Sylvain Lafontaine" a écrit :

Il s'agit de paramètres facultatifs qui ne doivent pas être utilisés comme
filtre dans la clause Where s'ils n'ont pas été définis par l'usager. Très
couramment utilisée pour les interfaces usagers.

Quant à l'opportunité de réécrire une procédure dont vous ne comprenez pas
tout à fait l'utilité, je me tiendrais loin de ce genre de chose si j'étais
à votre place.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: sylvain aei ca (fill the blanks, no spam please)


"hugueslouz" wrote in message
news:
> Bopnjour,
> j'ai vu une proc stock chez le client :
>
> create proc nom_proc (@var1 datetime() =null, @var2 varchar(20)=null)
> as
>
> select col1, col2 from nom_table
> where
> @var1 is null or @var2='' or @var1=col1
> and @var2 is null or @var2='' or @var2=col2
>
>
> Ma question je ne vois pas l'utilité de tester les variables dans la
> clause
> where et la comparaison devrait se faire col1=@var1 , col2=@var2 pour
> activer
> les index .
> est-ce que je me trompe?
> comme c'est une proc stock qui existe depuis et utilisée je me pose des
> questions avant de proposer de la reecrire.
>
> je vous remercie de votre aide pour m'eclairer.
>
> louz





Avatar
zoltix
hugueslouz a écrit :
D'apres ce que j'ai pulire dans optimsation de requetes, est que dans la
clause where doit etre colonne= @vartest pour activer l'index de la colonne
s'il existe. est-ce que dans le sens contraire c'est à dire d'abord @varibale
et puis colonne (Where @variable=colonne ) l'index de la colonne peut etre
activer.


"Sylvain Lafontaine" a écrit :

Il s'agit de paramètres facultatifs qui ne doivent pas être utilisés comme
filtre dans la clause Where s'ils n'ont pas été définis par l'usager. Très
couramment utilisée pour les interfaces usagers.

Quant à l'opportunité de réécrire une procédure dont vous ne comprenez pas
tout à fait l'utilité, je me tiendrais loin de ce genre de chose si j'étais
à votre place.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: sylvain aei ca (fill the blanks, no spam please)


"hugueslouz" wrote in message
news:
Bopnjour,
j'ai vu une proc stock chez le client :

create proc nom_proc (@var1 datetime() =null, @var2 varchar(20)=null)
as

select col1, col2 from nom_table
where
@var1 is null or @var2='' or @var1=col1
and @var2 is null or @var2='' or @var2=col2


Ma question je ne vois pas l'utilité de tester les variables dans la
clause
where et la comparaison devrait se faire col1=@var1 , col2=@var2 pour
activer
les index .
est-ce que je me trompe?
comme c'est une proc stock qui existe depuis et utilisée je me pose des
questions avant de proposer de la reecrire.

je vous remercie de votre aide pour m'eclairer.

louz









Curieux de savoir..... mais je pense que ça ne change rien.
Avatar
bruno reiter
Tu pourras vérifier avec le plan d'exécution que ça revient au même, par
contre les parenthèses sont indispensables :
where (@var1 is null or @var2='' or @var1=col1)
and (@var2 is null or @var2='' or @var2=col2)

br


"hugueslouz" a écrit dans le message
de news:
D'apres ce que j'ai pulire dans optimsation de requetes, est que dans la
clause where doit etre colonne= @vartest pour activer l'index de la
colonne
s'il existe. est-ce que dans le sens contraire c'est à dire d'abord
@varibale
et puis colonne (Where @variable=colonne ) l'index de la colonne peut etre
activer.


"Sylvain Lafontaine" a écrit :

Il s'agit de paramètres facultatifs qui ne doivent pas être utilisés
comme
filtre dans la clause Where s'ils n'ont pas été définis par l'usager.
Très
couramment utilisée pour les interfaces usagers.

Quant à l'opportunité de réécrire une procédure dont vous ne comprenez
pas
tout à fait l'utilité, je me tiendrais loin de ce genre de chose si
j'étais
à votre place.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: sylvain aei ca (fill the blanks, no spam please)


"hugueslouz" wrote in message
news:
> Bopnjour,
> j'ai vu une proc stock chez le client :
>
> create proc nom_proc (@var1 datetime() =null, @var2 varchar(20)=null)
> as
>
> select col1, col2 from nom_table
> where
> @var1 is null or @var2='' or @var1=col1
> and @var2 is null or @var2='' or @var2=col2
>
>
> Ma question je ne vois pas l'utilité de tester les variables dans la
> clause
> where et la comparaison devrait se faire col1=@var1 , col2=@var2 pour
> activer
> les index .
> est-ce que je me trompe?
> comme c'est une proc stock qui existe depuis et utilisée je me pose des
> questions avant de proposer de la reecrire.
>
> je vous remercie de votre aide pour m'eclairer.
>
> louz







Avatar
Fred BROUARD
hugueslouz a écrit :
Bopnjour,
j'ai vu une proc stock chez le client :

create proc nom_proc (@var1 datetime() =null, @var2 varchar(20)=null)
as

select col1, col2 from nom_table
where
@var1 is null or @var2='' or @var1=col1
and @var2 is null or @var2='' or @var2=col2



la bonne solution pour activer les index est :

select col1, col2
from nom_table
where col1 = COALESCE(NULLIF(@var1,''),col1)
and col2 = COALESCE(NULLIF(@var2,''),col2)



A +



Ma question je ne vois pas l'utilité de tester les variables dans la clause
where et la comparaison devrait se faire col1=@var1 , col2=@var2 pour activer
les index .
est-ce que je me trompe?
comme c'est une proc stock qui existe depuis et utilisée je me pose des
questions avant de proposer de la reecrire.

je vous remercie de votre aide pour m'eclairer.

louz




--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
Avatar
hugueslouz
je vous remercie beaucoup. Je vais exploiter toutes ces infos , je suis tres
satisfait de vos reponses.

hugueslouz


"Fred BROUARD" a écrit :

hugueslouz a écrit :
> Bopnjour,
> j'ai vu une proc stock chez le client :
>
> create proc nom_proc (@var1 datetime() =null, @var2 varchar(20)=null)
> as
>
> select col1, col2 from nom_table
> where
> @var1 is null or @var2='' or @var1=col1
> and @var2 is null or @var2='' or @var2=col2

la bonne solution pour activer les index est :

select col1, col2
from nom_table
where col1 = COALESCE(NULLIF(@var1,''),col1)
and col2 = COALESCE(NULLIF(@var2,''),col2)



A +

>
>
> Ma question je ne vois pas l'utilité de tester les variables dans la clause
> where et la comparaison devrait se faire col1=@var1 , col2=@var2 pour activer
> les index .
> est-ce que je me trompe?
> comme c'est une proc stock qui existe depuis et utilisée je me pose des
> questions avant de proposer de la reecrire.
>
> je vous remercie de votre aide pour m'eclairer.
>
> louz


--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************