Filtrer si paramètre est different de nulle

Résolu
Signaler
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Membre
Dernière intervention
13 octobre 2010
-
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Membre
Dernière intervention
13 octobre 2010
-
Bonjour, j'ai 2 problèmes avec une procédure stockée sur SQL server 2000

D'une part, j'aimerais filtrer mes articles par catégorie, si @IDCat est different de NULL. C'est à dire si je ne met aucun paramètre, cela me retourne tous les articles des differentes catégories.
D'autre part, j'aimerais si @ShowInactive False que cela me renvoie seulement les articles Actifs et contenu dans des catégories Actives, sinon (@ShowInactive True) que cela me renvoie tous les articles, qu'ils soient actifs ou non.

Je pourrais faire ceci avec plusieurs procédure stockée, mais je pense qu'il est preferable de faire ca avec une seule.

Voici la procédure en question.

ALTER procedure [dbo].[SP_GetArticlesSummary]
(
@IDCat int = NULL,
@ShowInactive bit = False
)
as


SELECT Table_Articles.IDArticle, Table_Articles.IDCat, Table_Articles.[Date], Table_Articles.Title, Table_Articles.Article, Table_Articles.Summary,
Table_Articles.IDAuthor, Table_Authors.Pseudo, Table_Authors.AuthorUrl, Table_Authors.Nom, Table_Authors.Prenom, Table_Authors.email,
Table_ArticleCategories.CatName, Table_ArticleCategories.isActive, Table_ArticleCategories.CatDescription, Table_ArticleCategories.Position
FROM Table_Articles INNER JOIN
Table_Authors ON Table_Articles.IDAuthor = Table_Authors.IDAuthor INNER JOIN
Table_ArticleCategories ON Table_Articles.IDCat = Table_ArticleCategories.IDCat
WHERE (
Table_ArticleCategories.isActive = 'True' and
Table_Articles.IDCat = @IDCat and
Table_Articles.isActive = 'True'
)

Merci




<HR>
Cyril - MVS - MCP ASP

2 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Membre
Dernière intervention
13 octobre 2010
29
Merci de ta réponse,

finalement aprés beaucoup de reflexion j'ai réussit à faire ca avec des conditions :

WHERE (
( (Table_Articles.isActive 'True' OR @ShowInactive 'True')
and (Table_ArticleCategories.isActive 'True' OR @ShowInactive 'True')
)
and
(
Table_Articles.IDCat = @IDCat
OR
@IDCat IS NULL
)
)

J'ai fait quelques test et ca fonctionne :)

Merci quand meme de t'etre interessé a mon problème


<HR>
Cyril - MVS - MCP ASP
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
37
Salut

Je ne pense pas que cette operation est possible
Pour la clause where

Elle est possible pour la clause select order et group by

Avec un operation du style

alter procedure
essai ( @filtre int)
as
BEGIn

select * from dossier
order by
case
when not @filtre is null then
id_dossier
else
dossier
end

END

Dans le groupe by
Tu peux utiliser les operations binaire pour faire des regroupements parametres.

Exemple

select max(id_dossier),max(dossier) from dossier
group by
case
when @filtre & 1 = 1 then
id_dossier
when @filtre & 2 = 2 then
dossier
end

END

ici 1 2 Et 3
1 --> group by id_dossier
2 --> group by dossier
3 --> group by id_dossier , dossier

Alors pour ton probleme
Je ne vois que le truc suivant

DECLARE SQL as varchar(8000)
SET SQL = 'SELECT * from matable'
IF ....
SET SQL = ' WHERE ...
ELSE
SET SQL = SQL + ' WHERE ...

EXEC(SQL)

Esperant avoir guider ta reflexion

Voila

voila