2010-09-06 5 views
1

Bonjour Experts j'ai un Sp, qui contient beaucoup de si/sinon Condition S'il vous plaît aidez-moi comment utiliser Switch Case dans T-SQL In Clause Where. ici est ma requêteSwitch Case dans T-SQL Dans où Clause

if (@Form ='page.aspx') 
begin 
select 
    DT.Column,DST.Column1, 
    DST.Code from Table DT 
join Table2 DST 
    on DT.ID= DST.ID 
where 
    DT.code = 'XX1' 
    and DT.CDID = @cdid 
end 

if (@Form ='Page2.aspx') 
begin 
select 
    DT.Column,DST.Column1, 
    DST.Code from Table DT 
join Table2 DST 
    on DT.ID= DST.ID 
where 
    DT.code = 'XX2' 
    and DT.CDID = @cdid 
end 

S'il vous plaît Aide-moi, tout pointeur ou suggestion serait grâce vraiment utile

Répondre

1

Pour cette requête particulière, vous pouvez écrire

select 

     DT.Column,DST.Column1, 
     DST.Code from Table DT 

    join Table2 DST 

     on DT.ID= DST.ID 
    where 

       DT.code = case @Form when 'page.aspx' then 'XX1' else 'XX2' end 
and DT.CDID = @cdid 
+0

Pouvons-nous ajouter mutiple condtion dans alors où (DST.Code = 'LICVA' OU DST.Code = 'CLI' –

+0

vous pouvez substituer une expression booléenne valide après le mot-clé de cas. Cas (@Form = 'page.aspx' ou @Form = 'page2.aspx') quand 0 alors ... else ... fin –

+0

Voir http://msdn.microsoft.com/en-us/library/ms181765.aspx pour la documentation. –

1
declare @dtCode varchar(255) 
select @dtCode = 
    CASE @Form 
     WHEN 'page.aspx' then 'XX1' 
     WHEN 'page2.aspx' then 'XX2' 
     ELSE 'NoIdea' 
    END 

select 
    DT.Column,DST.Column1, 
    DST.Code from Table DT 
join Table2 DST 
    on DT.ID= DST.ID 
where 
    DT.code = @dtCode 
    and DT.CDID = @cdid 

Remarque: Je l'ai écrit avec l'aide du Bloc-notes & non utilisé Query Analyzer pour vérifier toute erreur de syntaxe. Mais, j'espère que vous avez l'idée (de ne pas répéter les instructions SQL lorsque la seule chose qui change est la valeur de dtCode).

+0

Merci, il a aidé, si je dois Ajouter un autre opérateur autre que = comme DT.code <> « zz » ET DT.code <> « ZZ2 » en état alors ?? –