Correspondance d'un model compliqué dans SQL Server LIKE?

J'utilise une procédure stockée qui extrait un paramètre de string et l'utilise dans le cadre d'une WHERE table.value LIKE @pattern à l'une de ses requêtes. Avant que quelqu'un ne tombe dans ma gorge à propos des dangers que cela provoque, la procédure est appelée avec un set de valeurs connues comme paramètre de configuration – il n'y a pas de passage direct de l'input de l'user à ce paramètre.

Pour les cas individuels, cela fonctionne. Mes templates possibles sont:

 "RBI-%-TH%N-[AB]-%" "RBI-%-TH%NC-%" "RBI-%-TH%ND-%" "RBI-%-VISUAL%" 

Lorsque je suis confronté à un problème, j'essaie de couvrir les quatre éléments en définissant un motif par défaut (qui sélectionne tous les loggings où table.value correspond à l'un de ces motifs, mais rien d'autre). Les trois premiers sont assez faciles avec "RBI-%-TH%N-[ABCD]-%" mais je n'ai pas été en mesure de find un bon moyen de rendre count de la valeur finale possible. Y at-il un bon moyen, ou ai-je besoin de compliquer la procédure stockée avec la logique pour gérer cette condition?

Est

 select ... from ... where [value] like "RBI-%-TH%N-[ABCD]-%" or [value] like "RBI-%-VISUAL%" 

insuffisant?

Voici une autre variante utilisant UNION ALL qui, en fonction de la cardinalité, peut entraîner des balayages de scope plus limités, mais il est probable que vous effectuiez des parsings de longue durée, quelle que soit la manière dont vous construisez la requête. Vous devrez tester certaines des variantes et examiner les plans d'exécution pour voir comment les performances se cumulent lorsque celles-ci sont exécutées sur vos données. La configuration et l'utilisation de la search de text libre est-elle une option?

 SELECT ... FROM ... WHERE [value] like "RBI-%-TH%N-[A]-%" UNION ALL SELECT ... FROM ... WHERE [value] like "RBI-%-TH%N-[B]-%" UNION ALL SELECT ... FROM ... WHERE [value] like "RBI-%-TH%N-[C]-%" UNION ALL SELECT ... FROM ... WHERE [value] like "RBI-%-TH%N-[D]-%" UNION ALL SELECT ... FROM ... WHERE [value] like "RBI-%-VISUAL%"; 

J'ai posé une question similaire à:

TSQL – Motif de correspondance avec Like

Et il y avait quelques bonnes réponses. Je pense que celui qui vous aidera le mieux est de mettre vos templates possibles dans une nouvelle table et ensuite join les tables comme suggéré par MaxiWheat.