2009-06-15 11 views
2

Ich verwende eine gespeicherte Prozedur, um einen Bericht basierend auf SP-Parametern zu generieren. Ich muss mich den anderen anschließen, wenn die Bedingungen je nach den Parametern bestanden haben.Bedingte Where-Klausel in Select-Anweisung

Für z.

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

Jetzt möchte ich Bedingungen wie auf Parameter angeben Basis -

  1. Wenn nicht, dann 'alle Unternehmen' obere (Firma) = obere (@CompName)
  2. Wenn nicht 'ALLE BÜROS' dann OfficeID = @ CompBranchId
  3. Wenn nicht 'alle Staaten' dann StateID = @ StateID

Wie fusionieren ich alle diese Bedingungen in dem Zustand der select-Anweisung in Abhängigkeit von Parameterwert?

Jede Hilfe wird sehr geschätzt.

+0

Dank Eric, ich, dass bereits verwendet, aber das braucht zu viel Zeit –

Antwort

13

es wie folgt tun:

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

Danke, aber es scheint, dass Sie das Problem nicht verstanden haben. Wenn @compName = 'ALLE UNTERNEHMEN' dann keine Bedingung hinzufügen müssen, wenn @StateID = 'ALLE Staaten' dann keine Bedingung hinzufügen usw. –

+4

@Irfan, ich denke, Sie haben die Lösung nicht verstanden. :) Sie können die where-Klausel nicht dynamisch ändern, ohne dynamisches SQL zu verwenden (nicht empfohlen). Sie können sicherstellen, dass beim Übergeben der Standardzeichenfolge die übliche Where-Klausel umgangen wird. Das ist, wo "ODER" hereinkommt. "Entweder wurde der Standard übergeben ODER die Firmennamen stimmen überein." Probieren Sie die Lösung aus, bevor Sie sie notieren. – Talljoe

+1

Genau das ist der oben vorgeschlagene Code. Wenn @compName = 'ALLE UNTERNEHMEN', dann qualifiziert das jede Zeile. Andernfalls wird die obere (Company) = obere (@compName) ausgewertet. Gleiches gilt für die anderen beiden Parameterspalten. –