2013-05-15 176 views
1

我希望您能夠幫助相當新的SQL Server,請耐心等待。我試圖從CASE語句中設置一個變量,但碰到了mulit-identifier錯誤。該代碼試圖根據兩個日期字段的日期範圍內的日期變量將值解析爲變量。多部分標識符「」無法綁定

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 

回答

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 
+0

完美感謝這麼多的快速反應遺憾是這樣一個白癡 – JulesII

相關問題