Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server:Alternative zur langen CASE-Anweisung

Ich erwarte keine Leistungsprobleme vom CASE Aussage selbst. Da Ihre eine Abfrage die Daten einmal durchläuft, ist sie möglicherweise viel besser als mehrere Abfragen für jede Produkt-ID.

Die Abfrage kann mit einem WHERE besser ablaufen -Klausel -- wenn das mit Ihrer langen Abfrage überhaupt möglich ist.

Wenn die Tabelle groß und nach Produkt-ID indiziert ist und die Abfrage eine kleine Teilmenge von Produkten aktualisiert, erzielen Sie möglicherweise eine bessere Leistung, wenn Sie die Abfrage in separate UPDATE aufteilen Abfragen pro product_id. Andernfalls kann es passieren, dass Sie einen Tabellenscan auf einem riesigen Tisch erhalten. Zum Beispiel:

UPDATE table SET totalAmt = a*b*c*d WHERE product_id = 1
UPDATE table SET totalAmt = c*d*e + 1 WHERE product_id = 2

Wenn alle Fälle von product_id abhängen , dann könnten Sie die Syntax wie folgt abkürzen:

CASE product_id
    WHEN 1 THEN a*b*c*d
    WHEN 2 THEN ...
END

Ich würde empfehlen, Kommentare zu verwenden, um den Code lesbarer zu machen. Wenn es sich bei den Produkten beispielsweise um einen hartcodierten Satz bekannter IDs handelt, können Sie diese angeben. Ebenso kann es bei der zukünftigen Codepflege hilfreich sein, die Berechnung zu erklären:

UPDATE table
SET totalAmt =
    CASE WHEN product_id = 1 -- table
    THEN a*b*c*d             -- some explanation of calculation
    CASE WHEN product_id = 2 -- chair
    THEN ...