Comment filtrer de manière conditionnelle sur une colonne dans une clause WHERE?

OK, la n-ième colonne conditionnelle question:

Je suis en train d'écrire une procédure stockée qui prend un paramètre d'entrée qui est mappé à un de plusieurs drapeau colonnes. Quelle est la meilleure façon de filtre sur la colonne demandée? Je suis actuellement sur SQL2000, mais sur le point de passer à SQL2008, donc je vais prendre une solution moderne si l'on est disponible.

La table interrogée dans la procédure stockée ressemble

ID ...  fooFlag  barFlag  bazFlag  quuxFlag
--      -------  -------  -------  --------
01         1        0       0          1
02         0        1       0          0
03         0        0       1          1
04         1        0       0          0

et je veux faire quelque chose comme

select ID, name, description, ...
from myTable
where (colname like @flag + 'Flag') = 1

donc, si j'ai appeler la procédure stockée comme exec uspMyProc @flag = 'foo' je reviendrais lignes 1 et 4.

Je sais que je ne peux pas faire la part des parens directement en SQL. Dans le but de faire du SQL dynamique, je vais avoir à farcir l'intégralité de la requête dans une chaîne, concaténer les @drapeau param dans la clause where, puis exec de la chaîne. En dehors de la sale impression que j'ai quand faire du SQL dynamique, ma requête est assez grande (je suis de la sélection d'une douzaine de champs, rejoignant 5 tables, en appelant un couple de fonctions), c'est donc un grand géant de la chaîne tout en raison d'une seule ligne dans un 3 ligne de filtre.

En alternance, j'ai pu avoir 4 copies de la requête et sélectionnez parmi eux, dans une instruction case. Cela laisse le code SQL directement exécutable (et sous réserve de sa mise en surbrillance de la syntaxe, etc.) mais au prix de répéter, de gros morceaux de code, car je ne peux pas utiliser le CAS sur la clause where.

Existe-il d'autres options? Toute délicate des jointures ou des opérations logiques qui peuvent être appliquées? Ou devrais-je obtenir juste au-dessus et l'exec SQL dynamique?

source d'informationauteur Val