2012-12-22 102 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

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