2009-06-15 8 views
2

J'utilise une procédure stockée pour générer un rapport basé sur les paramètres de SP. Je dois rejoindre différents où les conditions dépendent des paramètres passés.Clause conditionnelle where dans l'instruction Select

Par ex.

ALTER PROCEDURE [dbo].[sp_Report_InventoryAging] 

@TitleFlag int=0, /*0-All veh, 1-Clear Title, 2-Without Clear Title*/ 

@CompName varchar(100) = 'ALL COMPANIES', 

@CompBranchId varchar(50) = 'ALL', /*All Offices*/ 

@StateId varchar(50)='All States'  /*All states*/ 

Select .... Where [email protected] and

Maintenant, je veux spécifier des conditions basées sur des paramètres tels que -

  1. Si pas 'TOUTES LES ENTREPRISES' puis supérieure (Société) = supérieure (@CompName)
  2. Sinon 'TOUS LES BUREAUX' OfficeID = @ CompBranchId
  3. Si pas 'TOUS les États', puis StateID = @ StateID

Comment puis-je fusionner toutes ces conditions dans lequel l'état de l'instruction select en fonction de la valeur du paramètre?

Toute aide est fortement appréciée.

+0

Merci Eric, je l'ai déjà utilisé cela, mais qui prend trop de temps –

Répondre

13

le faire comme ceci:

where 
(upper(Company)=upper(@CompName) or @compName = 'ALL COMPANIES') 
and 
([email protected] or @CompBranchId = 'ALL OFFICES') 
and 
([email protected] or @StateID = 'ALL States') 
+0

Merci, mais il semble que vous ne l'avez pas compris le problème. Si @compName = 'TOUTES LES SOCIÉTÉS', il n'est pas nécessaire d'ajouter de condition, si @StateID = 'ALL States', pas besoin d'ajouter de condition etc. –

+4

@Irfan, il me semble que vous n'avez pas compris la solution. :) Vous ne pouvez pas modifier dynamiquement la clause where sans utiliser SQL dynamique (non recommandé). Ce que vous pouvez faire est de vous assurer que lorsque la chaîne par défaut est passée, la clause where habituelle est ignorée. C'est là qu'intervient "OU". "La valeur par défaut a été transmise OU les noms de sociétés correspondent." Essayez la solution avant de la rejeter. – Talljoe

+1

C'est exactement ce que le code suggéré ci-dessus fait. Si @compName = 'TOUTES LES SOCIÉTÉS', cela qualifiera chaque ligne. Sinon, il évaluera upper (Company) = upper (@compName). Idem pour les deux autres colonnes de paramètres. –

Questions connexes