Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server:Алтернатива на дълъг оператор CASE

Не очаквам проблеми с производителността от CASE самото изявление. Тъй като вашата една заявка извършва еднократно преминаване към данните, тя може да се представи много по-добре от множество заявки за всеки идентификатор на продукт.

Заявката може да работи по-добре с WHERE клауза-- ако това дори е възможно с вашата дълга заявка.

Ако таблицата е голяма и е индексирана по идентификатор на продукт и заявката актуализира малко подмножество от продукти, може да получите по-добра производителност, като разделите заявката на отделни UPDATE заявки за product_id. В противен случай може да завършите със сканиране на маса на огромна маса. Например:

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

Ако всички случаи зависят от product_id , тогава можете да съкратите синтаксиса така:

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

Бих препоръчал да използвате коментари, за да направите кода по-четлив. Например, ако продуктите са твърдо кодиран набор от известни идентификатори, можете да посочите какви са те. По същия начин може да помогне за бъдеща поддръжка на кода, за да обясни изчислението:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Конфигуриране на стартираща среда в SQL Server Management Studio (SSMS) - SQL Server / TSQL урок, част 7

  2. Услуги за отчитане на SQL сървър:как да спрете изстрелването на отчет при отваряне

  3. Ключовата дума не се поддържа:"сървър"

  4. Месеци между две дати

  5. SQL Server 2016:Създайте връзка