Heim > Datenbank > MySQL-Tutorial > Wie verwende ich CASE-Anweisungen in SQL Server 2008 WHERE-Klauseln korrekt?

Wie verwende ich CASE-Anweisungen in SQL Server 2008 WHERE-Klauseln korrekt?

Linda Hamilton
Freigeben: 2025-01-11 10:24:41
Original
733 Leute haben es durchsucht

How to Correctly Use CASE Statements in SQL Server 2008 WHERE Clauses?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage