2016-07-23 8 views
0

Ich habe eine gespeicherte Prozedur für den Suchbildschirm, wo ich 5 verschiedene Filter habe. Benutzer können die Filter leer lassen oder einen Filter haben und auf die Schaltfläche Suchen klicken.Spalte in WHERE-Klausel ausschließen, wenn Feldwert leer ist

Alle Daten stammen aus der Datenbank, ich versuche, eine gespeicherte Prozedur zu erstellen, die Spalten in where-Klausel ausschließen kann, wenn der Parameterwert eine leere Zeichenfolge ist.

@Id as nvarchar(256) = 1 
@blnIsinProgress bit = 0 
@strStatus varchar(20) = '' 
@strName varchar(50) = '' 
@strConfirmationNumber varchar(50) = 123 
@dtmSubmittedFrom Date = '12/31/9999' 
@dtmSubmittedTo Date = '12/31/9999' 
as 
BEGIN 
SELECT * 
    FROM tblTable 
    WHERE 
    (@Id IS NULL OR lngID = @Id) AND 
    (@blnIsinProgress IS NULL OR blnIsinProgress = @blnIsinProgress) AND 
    (@strStatus = '' OR strStatus = @strStatus) AND 
    (@strName= '' OR strName= @strName) AND 
    (@strConfirmationNumber = '' or @strConfirmationNumber = @strConfirmationNumber) 
    End 

Aber

Execute spManage 1,0,'','',123 

gibt mir alle Ergebnisse

+0

Aber der Wert der Parameter kommt als leere Zeichenfolge. –

Antwort

1

Das Problem ist, diese Zeile:

(@strConfirmationNumber = '' or @strConfirmationNumber = @strConfirmationNumber) 

Die zweite Bedingung ist immer wahr. Sie haben ein extra @. Also, versuchen Sie folgendes:

(@strConfirmationNumber = '' or @strConfirmationNumber = strConfirmationNumber) 
+0

Ich fühle mich so dumm, aber danke –

+0

@LearnAspNet. . . Wir lernen, wenn wir Fehler machen. –

Verwandte Themen