Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server:Alternatywa dla długiej instrukcji CASE

Nie oczekuję żadnych problemów z wydajnością ze strony CASE samo oświadczenie. Ponieważ Twoje jedno zapytanie wykonuje jedno przejście do danych, może działać znacznie lepiej niż wiele zapytań dla każdego identyfikatora produktu.

Zapytanie może działać lepiej z WHERE klauzula -- jeśli jest to nawet możliwe przy długim zapytaniu.

Jeśli tabela jest duża i jest indeksowana według identyfikatora produktu, a zapytanie aktualizuje mały podzbiór produktów, możesz uzyskać lepszą wydajność, dzieląc zapytanie na oddzielne UPDATE zapytania na identyfikator produktu. W przeciwnym razie możesz skończyć ze skanowaniem stołu na ogromnym stole. Na przykład:

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

Jeśli wszystkie przypadki zależą od product_id , możesz skrócić składnię w ten sposób:

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

Polecam używanie komentarzy, aby kod był bardziej czytelny. Na przykład, jeśli produkty są zakodowanym na stałe zestawem znanych identyfikatorów, możesz określić, jakie one są. Podobnie może pomóc w przyszłej konserwacji kodu w wyjaśnieniu obliczeń:

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. Jak utworzyć procedurę składowaną, która opcjonalnie będzie przeszukiwać kolumny?

  2. jak uzyskać pełny zestaw wyników z SSMS

  3. Jak przekonwertować liczbę całkowitą na liczbę dziesiętną w SQL Server

  4. Pobieranie wyniku dynamicznego SQL do zmiennej dla serwera sql

  5. Jaki jest sens COLLATIONS dla kolumn nvarchar (Unicode)?