SQL Server 2008 WHERE-Klausel: Richtige Verwendung der CASE-Anweisung
Die Verwendung von CASE-Anweisungen in SQL Server 2008 WHERE-Klauseln erfordert eine präzise Syntax für eine korrekte Ausführung. Im Folgenden werden häufige Fehler und ihre Lösungen erläutert.
Ein Beispiel für die falsche Platzierung einer CASE-Anweisung in einer WHERE-Klausel:
<code class="language-sql">WHERE CASE LEN('TestPerson') WHEN 0 THEN co.personentered = co.personentered ELSE co.personentered LIKE '%TestPerson' END AND cc.ccnum = CASE LEN('TestFFNum') WHEN 0 THEN cc.ccnum ELSE 'TestFFNum' END </code>
Das Problem ist der Versuch, Werte innerhalb der CASE-Anweisung mit =
oder LIKE
zuzuweisen. Die CASE-Anweisung sollte für die bedingte Wertgenerierung und nicht für die Zuweisung verwendet werden. Der korrigierte Ansatz verwendet boolesche Logik:
<code class="language-sql">WHERE (LEN('TestPerson') = 0 AND co.personentered = co.personentered) OR (LEN('TestPerson') > 0 AND co.personentered LIKE '%TestPerson')</code>
Diese überarbeitete Abfrage wertet die Bedingungen basierend auf der Länge von „TestPerson“ korrekt aus.
Datumsvergleiche erfordern ebenfalls sorgfältige Überlegungen. Anstelle mehrerer verschachtelter CASE-Anweisungen ist die Verwendung separater ODER-Bedingungen oft klarer und effizienter:
<code class="language-sql">WHERE (LEN('2011-01-09 11:56:29.327') = 0 AND co.DTEntered = co.DTEntered) OR (LEN('2011-01-09 11:56:29.327') > 0 AND LEN('2012-01-09 11:56:29.327') = 0 AND co.DTEntered >= '2011-01-09 11:56:29.327') OR (LEN('2011-01-09 11:56:29.327') > 0 AND LEN('2012-01-09 11:56:29.327') > 0 AND co.DTEntered BETWEEN '2011-01-09 11:56:29.327' AND '2012-01-09 11:56:29.327')</code>
Durch die Verwendung dieser korrigierten Syntax werden Ihre SQL Server 2008-Abfragen, die CASE-Anweisungen in WHERE-Klauseln enthalten, wie vorgesehen ausgeführt.
Das obige ist der detaillierte Inhalt vonWie verwende ich CASE-Anweisungen in SQL Server 2008 WHERE-Klauseln korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!