2010-11-04 4 views
4

Je ne suis pas sûr de savoir quoi utiliser dans ce scénario, mais je pense qu'une instruction Case est appropriée.Déclaration de cas dans SQL Server 2005

Je ne connais pas la syntaxe cependant. Quelqu'un peut-il me guider s'il vous plaît?

J'ai une variable appelée @Action qui peut avoir environ 30 valeurs différentes.

Je veux faire quelque chose comme ça

CASE 
WHEN @Action = 'InsertTbl1' THEN 
    BEGIN 
    -- Some Insert statements and one update statements 
    END 
WHEN @Action = 'RecalculateCol3' THEN 
    BEGIN 
    -- Some update statements 
    END 
WHEN @Action = 'Closed' THEN 
    BEGIN 
    -- Some delete statements and some update statements 

    END 
--- and so on..... 
ELSE 
    BEGIN 
    END 
END 
+0

avez-vous essayé? –

Répondre

4

Proposer une structure de IF et ELSE IF pour imiter un interrupteur.

IF @MyVar = 'Foo' 
BEGIN 
    --react to Foo   
END 

ELSE IF @MyVar = 'Bar' 
BEGIN 
    --react to Bar  
END 
ELSE 
BEGIN 
    --default case. 
END 
+0

+1, c'est à peu près la seule façon pour plusieurs insertions et mises à jour dans un bloc – Andomar

+0

dans une instruction if il passe par les 30 ifs tout le temps - dans une déclaration de cas, une fois qu'un cas est trouvé, le reste n'est pas vérifié. –

+0

Y a-t-il quelque chose appelé Else IF donc je peux avoir une instruction if imbriquée au lieu de déclarations individuelles If ....? –

0

Oui, vous pouvez utiliser Sinon Si. Par exemple:

declare @temp int 
set @temp = 3 

if @temp = 1 
    print '1' 
else if @temp > 1 and @temp < 3 
    print '2' 
else if @temp >= 3 
    print '3' 

Je pense encore à le découper en procédures distinctes comme suggéré par d'autres