Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Изявление за случай в SQL заявка

CASE не се използва за контрол на логически поток... използвайте IF / ELSE IF вместо това:

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

Имайте предвид... тъй като използвате SELECT * и присъединяване към различна таблица въз основа на @TypeOfDayID , вероятно ще се окажете с назъбен набор от резултати, което означава, че ще имате различен брой колони в зависимост от това кой клон е зает.

Това може да е трудно да се работи с програмиране, така че би било добра идея да избягвате SELECT * по тази причина, както и по други причини...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо изгледът за динамично управление на SQL Server 2005 отчита липсващ индекс, когато не е?

  2. sql сървър 2008 активира sa акаунт

  3. Как да добавя персонализирани атрибути към SQL низ за връзка?

  4. Как да сравня SQL timestamp в .NET?

  5. T-SQL Изтрива всички редове от таблица, когато подзаявката е неправилно формирана