Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server:alternativa all'istruzione CASE lunga

Non mi aspetto alcun problema di prestazioni da CASE affermazione stessa. Poiché la tua unica query sta effettuando un passaggio ai dati, potrebbe funzionare molto meglio di più query per ciascun ID prodotto.

La query potrebbe funzionare meglio con un WHERE clausola-- se ciò è possibile anche con la tua lunga query.

Se la tabella è grande ed è indicizzata per ID prodotto e la query sta aggiornando un piccolo sottoinsieme di prodotti, potresti ottenere prestazioni migliori suddividendo la query in UPDATE separati query per product_id. Altrimenti potresti finire con una scansione del tavolo su un tavolo enorme. Ad esempio:

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

Se tutti i casi dipendono da product_id , quindi potresti abbreviare la sintassi in questo modo:

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

Consiglierei di utilizzare i commenti per rendere il codice più leggibile. Ad esempio, se i prodotti sono un set codificato di ID noti, è possibile specificare di cosa si tratta. Allo stesso modo, può aiutare la futura manutenzione del codice a spiegare il calcolo:

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 ...