Ich erstelle eine gespeicherte Prozedur, um Suchergebnisse zurückzugeben, wenn einige der Parameter optional sind.SQL if-Anweisung in where-Klausel zum Durchsuchen der Datenbank
Ich möchte eine "if-Anweisung" in meinem wo Klausel, aber kann es nicht funktionieren. Die , wobei-Klausel nur durch die Nicht-Null-Parameter filtern sollte.
Hier ist die sp
ALTER PROCEDURE spVillaGet
-- Add the parameters for the stored procedure here
@accomodationFK int = null,
@regionFK int = null,
@arrivalDate datetime,
@numberOfNights int,
@sleeps int = null,
@priceFloor money = null,
@priceCeil money = null
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
select tblVillas.*, tblWeeklyPrices.price from tblVillas
INNER JOIN tblWeeklyPrices on tblVillas.villaId = tblWeeklyPrices.villaFK
where
If @accomodationFK <> null then
accomodationTypeFK = @accomodationFK
@regionFK <> null Then
And regionFK = @regionFK
IF @sleeps <> null Then
And sleeps = @sleeps
IF @priceFloor <> null Then
And price >= @priceFloor And price <= @priceCeil
END
Irgendwelche Ideen, wie dies zu tun?
danke für Ihre Hilfe, aber der Wert in der Datenbank ist nicht null. Ich möchte diesen Teil der where-Klausel überspringen, wenn null für einen der Parameter übergeben wird. – mancmanomyst
Warum das funktioniert: Wenn @var null ist, dann ist die ganze Zeile wahr, unabhängig vom Rest der Zeile (also ignoriert und ungefiltert). Wenn es nicht null ist, dann ist die Zeile falsch *, es sei denn * ColVar = @ var, wodurch der Filter angewendet wird. Ich war verwirrt, als ich das erste Mal diesen Filterstil gelesen habe, aber jetzt überall benutze. –
mancmanomyst.myopenid.com: das ist, was das tut. Ich schlage vor, eine Wahrheitstabelle zu erstellen - sie ist zunächst nicht intuitiv. –