Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Instruction de cas dans une requête SQL

CASE n'est pas utilisé pour le contrôle de flux logique... utilisez IF / ELSE IF à la place :

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

Gardez à l'esprit... puisque vous utilisez SELECT * , et rejoindre une autre table basée sur @TypeOfDayID , vous obtiendrez probablement un ensemble de résultats irrégulier, ce qui signifie que vous aurez un nombre variable de colonnes en fonction de la branche prise.

Cela peut être pénible à utiliser par programmation, donc ce serait une bonne idée d'éviter SELECT * pour cette raison, ainsi que d'autres raisons...