J'ai du code T-SQL utilisant plusieurs instructions if (environ 100) comme ci-dessous. Si la première condition de l'instruction IF est évaluée à TRUE, elle évalue toujours le reste des 99 instructions.
IF(@check = 'abc') SET @var1 = @value
IF(@check = 'def') SET @var2 = @value
IF(@check = 'ghi') SET @var3 = @value
IF(@check = 'jkl') SET @var4 = @value
IF(@check = 'mno') SET @var5 = @value
…
…
Je veux les convertir pour utiliser une expression CASE. par exemple
CASE @check
WHEN 'abc' THEN SET @var1 = @value
WHEN 'def' THEN SET @var2 = @value
WHEN 'ghi' THEN SET @var3 = @value
WHEN 'jkl' THEN SET @var4 = @value
WHEN 'mno' THEN SET @var5 = @value
…
…
END
Cependant, je ne suis pas en mesure de le faire et j'obtiens une erreur SQL qui indique que je ne peux pas utiliser SET dans une expression CASE.
Quelqu'un at-il des idées sur la façon dont je peux y parvenir? Merci!
Une déclaration de cas ne suffira pas: la seule façon d'utiliser SET avec CASE est de faire:
SET @var = CASE @check
WHEN 'abc' THEN @value
[etc]
END
... qui ne fonctionnera pas pour vous car cela ne peut définir qu'une seule variable. Vous devez donc utiliser ELSE, c'est-à-dire:
IF (@check = 'abc') SET @var1 = @value
ELSE IF (@check = 'def') SET @var2 = @value
ELSE IF (@check = 'ghi') SET @var3 = @value
ELSE IF (@check = 'jkl') SET @var4 = @value
ELSE IF (@check = 'mno') SET @var5 = @value
[...]
Cependant, si vous avez 100 clauses comme celle-ci définissant 100 variables différentes, il semble que votre approche puisse être erronée: je prendrais du recul et me demander pourquoi vous avez besoin de 100 variables distinctes. Il y a peut-être quelque chose de mieux que vous pouvez faire en tant que solution basée sur un ensemble, soit la lecture à partir de tables principales ou temporaires. Cependant, nous aurions besoin de plus de détails sur ce que vous essayez de faire (avec un petit exemple, mais pleinement fonctionnel).
En tant que modification de la réponse de Chris J. Quiconque ici cherche à définir PLUSIEURS paramètres dans un seul if, else if ou else - utilisez la syntaxe suivante:
IF (@check = 'abc')
begin
SET @var1 = @value
SET @var2 = @value
end
ELSE IF (@check = 'def')
begin
SET @var1 = @value
SET @var2 = @value
end
ELSE IF (@check = 'ghi')
begin
SET @var1 = @value
SET @var2 = @value
end
ELSE IF (@check = 'jkl')
begin
SET @var1 = @value
SET @var2 = @value
end
ELSE IF (@check = 'mno')
begin
SET @var1 = @value
SET @var2 = @value
end
Notez l'utilisation des instructions "begin" et "end". Ces mots clés sont analogues aux accolades que l'on trouve dans la plupart des langages de programmation et permettent de spécifier plusieurs lignes dans une instruction donnée.