sql >> Databáze >  >> RDS >> Sqlserver

Case Statement v SQL Query

CASE nepoužívá se pro řízení logického toku... použijte IF / ELSE IF místo toho:

declare @TypeofDayID int
set @TypeofDayID = (Select TypeofDayID from RepInfo where RepInfoID = @RepInfoID)

IF @TypeofDayID = 1 
  Select * 
  from RepInfo RD inner join SellingInfo S on S.RepInfoID = @RepInfoID
ELSE IF @TypeofDayID = 2
  Select * 
  from RepInfo RD inner join UpgradingInfo U on U.RepInfoID = @RepDailyID
ELSE IF @TypeofDayID = 9 or @TypeofDayID = 10
  Select * 
  from RepInfo RD inner join DeliveryInfo D on D.RepDailyID = @RepDailyID

Mějte na paměti... protože používáte SELECT * a připojení k jiné tabulce na základě @TypeOfDayID , pravděpodobně skončíte se zubatou sadou výsledků, což znamená, že budete mít různý počet sloupců podle toho, která větev se použije.

Programově s tím může být obtížné pracovat, takže by bylo dobré se vyhnout SELECT * z tohoto důvodu, stejně jako z jiných důvodů...



  1. Kdy *ne* použít připravené výpisy?

  2. očekává, že parametr 1 bude zadán zdroj, člověk, logická hodnota

  3. Zpracování velmi velkých dat pomocí mysql

  4. Nelze otevřít databázi v režimu čtení/zápisu