IF..ELSE块无法正常工作

时间:2012-12-22 04:20:18

标签: sql sql-server tsql

我的程序中有一个if else块。根据今天的日期在此块中设置临时变量 @timeID 的值。

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())

返回星期六

2 个答案:

答案 0 :(得分:4)

好的,假设是星期六:

第一个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

答案 1 :(得分:3)

您的第二个if子句应使用AND,而不是OR。每天不是星期天或星期六