Überarbeitung einer vorhandenen gespeicherten Prozedur, um einen zuvor erforderlichen Parameter optional zu machen.SQL Multi-Condition WHERE-Klausel mit einem optionalen Parameter?
Die Abfrage ist massiv, und beschäftigt sich mit viel mehr als mein aktuelles Problem, also werde ich es nicht in seiner Gesamtheit veröffentlichen, aber ich glaube, dass ich meine Korrektur erhalten kann, indem Sie eine der WHERE
Klauseln bearbeiten.
WHERE
O.wsID = @wsid AND
((M.UpdateDate BETWEEN @olddate AND @newdate) OR (MI.UpdateDate BETWEEN @olddate AND @newdate))
Der erste Parameter @wsid
ist der Wert I optional machen muß, wird es zunächst als 0 und gegeben einen neuen Wert aus einer Auswahlbox auf dem Front-End der Website erklärt. Ich habe versucht, eine CASE
Anweisung zu verwenden, um zwischen WHERE
Klauseln zu wechseln, abhängig davon, ob der Wert 0 oder eine tatsächliche ID ist.
WHERE
@wsid = CASE
WHEN @wsid <> 0 THEN ((O.wsID = @wsid) AND ((M.UpdateDate BETWEEN @olddate AND @newdate) OR (MI.UpdateDate BETWEEN @olddate AND @newdate)))
ELSE ((M.UpdateDate BETWEEN @olddate AND @newdate) OR (MI.UpdateDate BETWEEN @olddate AND @newdate)))
END
Aber ich habe eine Reihe von Syntaxfehlern in der WHERE
Klausel selbst und auch einen Fehler, der besagt Expecting CONVERSATION or TRY
für die SELECT
unter Anweisung.
Gibt es eine einfachere Option, um den Parameter O.wsid = @wsid
optional zu machen?
Ich kann nicht glauben, dass es so einfach war ... ah gut, das ist Montagmorgen für dich. Danke, funktioniert perfekt. – Wompguinea
Seien Sie vorsichtig, "ODER @wsid = 0" kann einen Tabellenscan verursachen. OPTION (RECOMPILE) verhindert dies. – under
@unter ja, du hast Recht. Es kann manchmal schmerzhaft sein – Backs