sql >> Databasteknik >  >> RDS >> Sqlserver

Villkorlig Check in Where-klausul

Vissa människor använder den här tekniken

... WHERE @itemid IS NULL OR tbl.itemid = @itemid

Det garanterar dock att du aldrig kommer att få en indexsökning i kolumnen itemid.

Ett bättre tillvägagångssätt om tabellen överhuvudtaget är stor är att dela upp frågan i två separata fall

IF(@itemid IS NULL)
  SELECT foo FROM bar
ELSE
  SELECT foo FROM bar WHERE itemid = @itemid

Om antalet kombinationer är för stort kan du överväga dynamisk SQL. Se till att du förstår SQL-injektion först.

Ref:Dynamiska sökvillkor i T-SQL



  1. Hur kan jag programmatiskt kontrollera (tolka) giltigheten av en TSQL-sats?

  2. jetty-env.xml med DataSource leder till felaktig WebAppContext på mvn jetty:run

  3. Skanningar av allokeringsorder

  4. Ändra kolumndatatyp med primärnyckel