sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server:Alternativ till lång CASE-sats

Jag förväntar mig inga prestandaproblem från CASE själva uttalandet. Eftersom din ena fråga gör en genomgång av data, kan den fungera mycket bättre än flera frågor för varje produkt-ID.

Frågan kan fungera bättre med en WHERE klausul - om det ens är möjligt med din långa fråga.

Om tabellen är stor och den är indexerad efter produkt-id och frågan uppdaterar en liten delmängd av produkter kan du få bättre prestanda genom att dela upp frågan i separata UPDATE frågor per produkt-id. Annars kan du sluta med en bordsskanning på ett stort bord. Till exempel:

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

Om alla fall beror på product_id , då kan du förkorta syntaxen så här:

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

Jag skulle rekommendera att du använder kommentarer för att göra koden mer läsbar. Om produkterna till exempel är en hårdkodad uppsättning kända ID:n kan du ange vad de är. På samma sätt kan det hjälpa framtida kodunderhåll att förklara beräkningen:

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. Pausa SQL-serverreplikering tillfälligt

  2. Hur lägger man till en NOT NULL-kolumn i en stor tabell i SQL Server?

  3. Hur man hanterar markörundantag när urvalsfrågan returnerar noll poster

  4. Potentiella fall av att byta teckenuppsättning i MySQL?