2010-02-25 4 views
2

Je veux (vaguement) une procédure stockée commeUtilisation de paramètres dans les procédures stockées où la colonne peut être nulle

select * from table où col1 comme @var

la valeur par défaut de @var est ' % ', donc si je n'ai pas de valeur pour @var, il devrait retourner toutes les lignes. Cependant, le problème est qu'il ne retourne pas les lignes où col1 est nul. Comment puis-je retourner toutes les lignes si @var = '%' et les lignes qui ressemblent à @var si elle a une valeur?

[sp réelle est beaucoup plus complexe, donc je ne veux pas envelopper juste dans un if..then et ont deux sélections]

Répondre

3
select * from table where isnull(col1, '') like @var 

devrait faire l'affaire.

+0

En supposant que vous utilisez T-SQL, c'est. :-) – roufamatic

+0

Cool. Cela semble fonctionner correctement. Cela fait seulement une heure ou plus gaspillée avec CASE et/ou COALESCE etc Cheers! – Apemantus

0

Vous pourriez cas particulier lorsque @var est « % » pour inclure toutes les valeurs nulles comme celle-ci:

select * from table where col like @var or (@var = '%' and col is null) 
1

Juste un heads-up plus que tout. Si ce SP doit être utilisé fréquemment et que les données que vous sélectionnez sont grandes, assurez-vous de tester la performance de votre requête (en utilisant l'une des solutions ci-dessus). De l'expérience passée en utilisant LIKE et ISNULL ou IS NULL ensemble peut avoir un grand succès de performance

Questions connexes