Where avec Case?

Le
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.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice
Le #17455441
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" 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.


Don Juan
Le #17456271
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" 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" 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.






Don Juan
Le #17456651
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" 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" 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.






Patrice
Le #17456821
"Don Juan" 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é ?
Don Juan
Le #17457031
Mes excusses!!!
ça marche, merci.

"Patrice" news:
"Don Juan" 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é ?



SQLpro
Le #17457651
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"
Mes excusses!!!
ça marche, merci.

"Patrice"
news:

> "Don Juan" > 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é ?


Publicité
Poster une réponse
Anonyme