Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Where avec Case?

6 réponses
Avatar
Don Juan
Bonjour à tous
Je reçois une variable dans mon StoreProcedure qui contient el ID du client.
Alors j'utilise cette ligne de code:

WHERE ID=@ID

Mais si le ID est: 0 alors je dois montrer tous les clients, el la ligne
change pour:

WHERE ID <> @ID

Pour le moment j'ai crée deux store procedures, chaque avec un WHERE
different. Est-il possible de faire quelque chose comme cela? Pour avoir la
même logique dan un seul WHERE
WHERE
CASE
WHEN @ID=0 THEN
ID <> @ID
ELSE
ID = @ID
END

1000 mercis d'avance.

6 réponses

Avatar
Patrice
Simplement avec where ID=@id or @id=0 (j'imagine qu'il n'y pas de client 0).

Le CASE retourne une valeur (le pseudo-code semble le laisser entendre
semble laisser entendre que tu le vois comme une sorte de "IF")


--
Patrice

"Don Juan" a écrit dans le message de groupe de
discussion :
Bonjour à tous
Je reçois une variable dans mon StoreProcedure qui contient el ID du
client.
Alors j'utilise cette ligne de code:

WHERE ID=@ID

Mais si le ID est: 0 alors je dois montrer tous les clients, el la ligne
change pour:

WHERE ID <> @ID

Pour le moment j'ai crée deux store procedures, chaque avec un WHERE
different. Est-il possible de faire quelque chose comme cela? Pour avoir
la même logique dan un seul WHERE
WHERE
CASE
WHEN @ID=0 THEN
ID <> @ID
ELSE
ID = @ID
END

1000 mercis d'avance.


Avatar
Don Juan
En efait, il n'a pas de ID 0, c'est pour cela qu'on l'utilise pour afficher
tout le monde.
maintenant, suppossant que le ID es 2 alors ton code dis: soit 2 ou 0 donc
on verra le 2.
maintenant, si le ID es 0 ton code dis: soit 0 ou 0 alors on affiche tous
les ID de 0 alors rien de tout.


"Patrice" <http://www.chez.com/scribe/&gt; wrote in message
news:
Simplement avec where ID=@id or @id=0 (j'imagine qu'il n'y pas de client
0).

Le CASE retourne une valeur (le pseudo-code semble le laisser entendre
semble laisser entendre que tu le vois comme une sorte de "IF")


--
Patrice

"Don Juan" a écrit dans le message de groupe de
discussion :
Bonjour à tous
Je reçois une variable dans mon StoreProcedure qui contient el ID du
client.
Alors j'utilise cette ligne de code:

WHERE ID=@ID

Mais si le ID est: 0 alors je dois montrer tous les clients, el la ligne
change pour:

WHERE ID <> @ID

Pour le moment j'ai crée deux store procedures, chaque avec un WHERE
different. Est-il possible de faire quelque chose comme cela? Pour avoir
la même logique dan un seul WHERE
WHERE
CASE
WHEN @ID=0 THEN
ID <> @ID
ELSE
ID = @ID
END

1000 mercis d'avance.






Avatar
Don Juan
Patrice:
Pour mieux éxpliquer, il faut comparer la valeur de @ID
quand @ID a une valeur de 0 alors le WHERE dois utiliser: WHERE ID<>@ID
quand @ID a une valeur different de 0 alors le WHERE dois utilise: WHERE
ID=@ID

1000 mercis de ton temps!

"Patrice" <http://www.chez.com/scribe/&gt; wrote in message
news:
Simplement avec where ID=@id or @id=0 (j'imagine qu'il n'y pas de client
0).

Le CASE retourne une valeur (le pseudo-code semble le laisser entendre
semble laisser entendre que tu le vois comme une sorte de "IF")


--
Patrice

"Don Juan" a écrit dans le message de groupe de
discussion :
Bonjour à tous
Je reçois une variable dans mon StoreProcedure qui contient el ID du
client.
Alors j'utilise cette ligne de code:

WHERE ID=@ID

Mais si le ID est: 0 alors je dois montrer tous les clients, el la ligne
change pour:

WHERE ID <> @ID

Pour le moment j'ai crée deux store procedures, chaque avec un WHERE
different. Est-il possible de faire quelque chose comme cela? Pour avoir
la même logique dan un seul WHERE
WHERE
CASE
WHEN @ID=0 THEN
ID <> @ID
ELSE
ID = @ID
END

1000 mercis d'avance.






Avatar
Patrice
"Don Juan" a écrit dans le message de groupe de
discussion :
En efait, il n'a pas de ID 0, c'est pour cela qu'on l'utilise pour
afficher tout le monde.
maintenant, suppossant que le ID es 2 alors ton code dis: soit 2 ou 0 donc
on verra le 2.



Oui

maintenant, si le ID es 0 ton code dis: soit 0 ou 0 alors on affiche tous
les ID de 0 alors rien de tout.



Non

On aura id=0 ou 0=0 ce qui est vrai pour toute les lignes donc toutes les
lignes seront affichées.

Ne pas confondre id qui est le champ dans la table et @id qui est un
paramètre...

As tu essayé ?
Avatar
Don Juan
Mes excusses!!!
ça marche, merci.

"Patrice" <http://www.chez.com/scribe/&gt; wrote in message
news:
"Don Juan" a écrit dans le message de groupe de
discussion :
En efait, il n'a pas de ID 0, c'est pour cela qu'on l'utilise pour
afficher tout le monde.
maintenant, suppossant que le ID es 2 alors ton code dis: soit 2 ou 0
donc on verra le 2.



Oui

maintenant, si le ID es 0 ton code dis: soit 0 ou 0 alors on affiche tous
les ID de 0 alors rien de tout.



Non

On aura id=0 ou 0=0 ce qui est vrai pour toute les lignes donc toutes les
lignes seront affichées.

Ne pas confondre id qui est le champ dans la table et @id qui est un
paramètre...

As tu essayé ?



Avatar
SQLpro
Il serait beaucoup plus intelligent de faire :
WHERE MaColonne = COALESCE(NULLIF(@ID, 0), MaColonne)

Ou encore, si vous passez NULL à la place de zéro :
WHERE MaColonne = COALESCE(@ID, MaColonne)

A +

Frédéric BROUARD - SQLpro - MVP SQL Server
Spécialiste SQL/BD modélisation de données
SQL & SGBDR http://sqlpro.developpez.com/
Expert SQL Server : http://www.sqlspot.com
audits - optimisation - tuning - formation

On 8 oct, 12:10, "Don Juan" wrote:
Mes excusses!!!
ça marche, merci.

"Patrice" <http://www.chez.com/scribe/&gt; wrote in message

news:

> "Don Juan" a écrit dans le message de groupe de
> discussion :
>> En efait, il n'a pas de ID 0, c'est pour cela qu'on l'utilise pour
>> afficher tout le monde.
>> maintenant, suppossant que le ID es 2 alors ton code dis: soit 2 ou 0
>> donc on verra le 2.

> Oui

>> maintenant, si le ID es 0 ton code dis: soit 0 ou 0 alors on affiche t ous
>> les ID de 0 alors rien de tout.

> Non

> On aura id=0 ou 0=0 ce qui est vrai pour toute les lignes donc tout es les
> lignes seront affichées.

> Ne pas confondre id qui est le champ dans la table et @id qui est un
> paramètre...

> As tu essayé ?