2012-12-22 148 views
3

我的程序中有一個if else塊。根據今天的日期,在該塊中設置臨時變量的值@timeIDIF..ELSE塊不能正常工作SQL

declare @timeId int 
if(datename(Dw,getdate())='Sunday' or datename(Dw,getdate())='Saturday') 
begin 
    set @timeId=2 
end 

if(datename(Dw,getdate())!='Sunday' or datename(Dw,getdate())!='Saturday') 
begin 
if(convert(varchar(11),getdate(),108)<='08:30:00') 
    begin 
    set @timeId=0 
    end 
else 
    begin 
    set @timeId=1 
    end 
end 


select @timeId as TimeID 

由於今天是週六@timeID必須設置等於2 但輸出顯示@timeId=1從而導致錯誤的結果從我的程序。請幫助什麼是錯的。

select datename(Dw,getdate()) 

回報週六

+0

我想條件'if(convert(varchar(11),getdate(),108)<='08:30:00')'變成false並且if(datename (Dw,getdate())!='Sunday'或datename(Dw,getdate())!='Saturday')'是真的。 – TechDo

回答

5

OK,假設它是星期六:

第一IF塊運行。

然後第二個IF區塊運行,因爲OR條件在!= Sunday,覆蓋@timeid

你想要一個ELSE(事實上,你可以刪除多餘的測試,簡化了代碼):

declare @timeId int 
if(datename(Dw,getdate())='Sunday' or datename(Dw,getdate())='Saturday') 
begin 
    set @timeId=2 
end 

ELSE 

begin 
if(convert(varchar(11),getdate(),108)<='08:30:00') 
    begin 
    set @timeId=0 
    end 
else 
    begin 
    set @timeId=1 
    end 
end 
+0

它的工作..!謝謝..但請告訴我在做什麼錯了..爲什麼第二如果其他塊被執行和@timeid變成1 –

+0

好了解...星期日導致問題..感謝很多先生.. –

+0

和downvote是因爲?漂亮的跛腳... –

3

和你的第二個if語句應該使用,而不是OR。每天不是星期日或不是星期六

+0

哈哈哈...是的,愚蠢的我...謝謝 –