2012-12-22 4 views
3

travail j'ai un bloc if else dans ma procédure. La valeur d'une variable temporaire @timeID est situé dans ce bloc selon la date d'aujourd'hui.bloc if..else pas 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 

Depuis aujourd'hui est samedi, @timeID doit être égal à 2. Mais la sortie montre @timeId=1 qui se traduit par un mauvais résultat de ma procédure. S'il vous plaît aider à ce qui ne va pas.

select datename(Dw,getdate()) 

Retour samedi

+0

Je suppose que la condition 'if (conversion (varchar (11), getdate(), 108) <= '08:30:00')' est faux et obtenir 'si (datename (Dw, getdate())! = 'Dimanche' ou datename (Dw, getdate())! = 'Samedi') 'est vrai. – TechDo

Répondre

5

OK, supposons qu'il est samedi:

Les premières séries de blocs IF.

Ensuite, le deuxième bloc IF s'exécute en raison de la condition OR sur != Sunday, en écrasant @timeid.

Vous voulez un ELSE (et en fait, vous pouvez abandonner le test supplémentaire, ce qui simplifie le code):

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

Ca marche .. !!! thanks..but s'il vous plaît dire ce que je faisais mal .. pourquoi seconde Si le bloc est exécuté et d'autre @timeid devient 1 –

+0

ok compris ... dimanche était à l'origine problem..thanks beaucoup monsieur .. –

+0

et le downvote est parce que? assez boiteux ... –

3

Votre deuxième si clause doit utiliser et, non OU. Chaque jour est un dimanche ou pas samedi

+0

hahaha ... ouais l'ai eu, stupide moi ... merci –