1

我希望你能帮助相当新的 SQL Server,所以请耐心等待。我正在尝试从 CASE 语句中设置一个变量,但遇到了多标识符错误。该代码试图根据日期变量在两个日期字段的日期范围内将值解析为变量。

use KSSDB

declare @DateFrom   as datetime,
    @DateTo     as datetime,
    @ResInt     as int,
    @ProgID     as int,
    @PERSID     as int


set @DateFrom = '2010/11/01'
set @DateTo = '2013/11/01'
set @ProgID = 63
set @PERSID = 4492

--select PT.PROG_ID, 
--      PT.PERS_ID, 
--      P.PROG_NAME,
--      format(PT.PROG_TRAI_SD, 'dd/MM/yyyy') as PROG_TRAI_SD, 
--      format(PT.PROG_TRAI_ED, 'dd/MM/yyyy')as PROG_TRAI_ED,

set @resint =   CASE when (@DateFrom > PT.PROG_TRAI_SD and @dateto < PT.PROG_TRAI_ED) then 1
    when (@datefrom > PT.PROG_TRAI_ED and @DateTo > PT.PROG_TRAI_ED) then 2 
    when (@datefrom < PT.PROG_TRAI_SD and @DateTo > PT.PROG_TRAI_ED) then 3 
    else  0
    end

select @ResInt

from    PROG p
    JOIN PROG_TRAI PT ON P.PROG_ID = PT.PROG_ID

where   PT.PROG_ID = @ProgID and 
    PT.PERS_ID = @PERSID
4

1 回答 1

2

问题是您的语句与您的CASE语句是分开的,SELECT ... FROM并且您正试图@resint在表中设置使用数据。

尝试使用这样的东西:

select @resint 
  = CASE when (@DateFrom > PT.PROG_TRAI_SD and @dateto < PT.PROG_TRAI_ED) then 1
         when (@datefrom > PT.PROG_TRAI_ED and @DateTo > PT.PROG_TRAI_ED) then 2 
         when (@datefrom < PT.PROG_TRAI_SD and @DateTo > PT.PROG_TRAI_ED) then 3 
         else  0
    end
from PROG p
JOIN PROG_TRAI PT 
  ON P.PROG_ID = PT.PROG_ID
where PT.PROG_ID = @ProgID and 
    PT.PERS_ID = @PERSID
于 2013-05-15T10:49:08.853 回答