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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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" <hugueslouz@discussions.microsoft.com> wrote in message
news:BA1E8B30-2180-4DA0-A298-51B63739B343@microsoft.com...
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.
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
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
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" <hugueslouz@discussions.microsoft.com> wrote in message
news:BA1E8B30-2180-4DA0-A298-51B63739B343@microsoft.com...
> 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
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
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.
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" <hugueslouz@discussions.microsoft.com> wrote in message
news:BA1E8B30-2180-4DA0-A298-51B63739B343@microsoft.com...
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.
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.
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
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" <hugueslouz@discussions.microsoft.com> a écrit dans le message
de news: 11A99299-FD39-4CE5-ABDC-714BAD552FFC@microsoft.com...
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" <hugueslouz@discussions.microsoft.com> wrote in message
news:BA1E8B30-2180-4DA0-A298-51B63739B343@microsoft.com...
> 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
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
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 ***********************
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 ***********************
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 ***********************
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 ***********************
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 ***********************
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 ***********************