Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Instrução de caso na consulta SQL


CASE não é usado para controle de fluxo lógico... use IF / ELSE IF em vez de:
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

Lembre-se... já que você está usando SELECT * , e juntando-se a uma tabela diferente com base em @TypeOfDayID , você provavelmente terminará com um conjunto de resultados irregular, o que significa que você terá um número variável de colunas com base em qual ramificação é obtida.

Isso pode ser difícil de trabalhar programaticamente, então seria uma boa ideia evitar SELECT * por esse motivo, assim como outros motivos...