Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Case-Anweisung in der SQL-Abfrage

CASE wird nicht für die logische Flusskontrolle verwendet ... verwenden Sie IF / ELSE IF stattdessen:

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

Denken Sie daran... da Sie SELECT * verwenden , und Verknüpfen mit einer anderen Tabelle basierend auf @TypeOfDayID , erhalten Sie wahrscheinlich eine gezackte Ergebnismenge, was bedeutet, dass Sie eine unterschiedliche Anzahl von Spalten haben, je nachdem, welcher Zweig genommen wird.

Es kann mühsam sein, damit programmgesteuert zu arbeiten, daher wäre es eine gute Idee, SELECT * zu vermeiden aus diesem Grund, sowie aus anderen Gründen...