Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SQL Server :alternative à la longue instruction CASE

Je ne m'attends à aucun problème de performances de la part du CASE déclaration elle-même. Étant donné que votre requête unique effectue une seule passe sur les données, elle peut être beaucoup plus performante que plusieurs requêtes pour chaque ID de produit.

La requête peut être plus performante avec un WHERE clause-- si cela est encore possible avec votre longue requête.

Si le tableau est volumineux et qu'il est indexé par ID de produit et que la requête met à jour un petit sous-ensemble de produits, vous obtiendrez peut-être de meilleures performances en divisant la requête en UPDATE distincts. requêtes par product_id. Sinon, vous risquez de vous retrouver avec un scan de table sur une immense table. Par exemple :

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

Si tous les cas dépendent de product_id , vous pouvez alors abréger la syntaxe comme suit :

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

Je recommanderais d'utiliser des commentaires pour rendre le code plus lisible. Par exemple, si les produits sont un ensemble codé en dur d'ID connus, vous pouvez spécifier ce qu'ils sont. De même, cela peut aider la future maintenance du code d'expliquer le calcul :

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