J'ai besoin de brancher mon flux de contrôle de procédure stockée T-SQL (MS SQL 2008) dans un certain nombre de directions:
CREATE PROCEDURE [fooBar]
@inputParam INT
AS
BEGIN
IF @inputParam = 1
BEGIN
...
END
ELSE IF @inputParam = 3
BEGIN
...
END
ELSE IF @inputParam = 3
BEGIN
...
END
END
Y a-t-il d'autres moyens? Par exemple, dans C#
Je devrais utiliser switch-case
bloquer.
SI ... ELSE ... est à peu près ce que nous avons dans T-SQL. Il n'y a rien de tel que l'instruction CASE de la programmation structurée. Si vous avez un ensemble étendu de ... ELSE IF ... s à gérer, assurez-vous d'inclure BEGIN ... END pour chaque bloc pour que les choses soient claires, et rappelez-vous toujours qu'une indentation cohérente est votre ami!
Vous pouvez également essayer de formuler votre réponse sous la forme d'un SELECT CASE
Déclaration. Vous pouvez ensuite créer des ifs simples qui utilisent vos résultats si nécessaire, car vous avez réduit les possibilités.
SELECT @Result =
CASE @inputParam
WHEN 1 THEN 1
WHEN 2 THEN 2
WHEN 3 THEN 1
ELSE 4
END
IF @Result = 1
BEGIN
...
END
IF @Result = 2
BEGIN
....
END
IF @Result = 4
BEGIN
//Error handling code
END
Non, mais vous devez être prudent lorsque vous utilisez IF ... ELSE ... END IF dans les proc stockés. Si vos blocs de code sont radicalement différents, vous pouvez souffrir de performances médiocres car le plan de procédure devra être remis en cache à chaque fois. S'il s'agit d'un système hautes performances, vous souhaiterez peut-être compiler des procs stockés séparés pour chaque bloc de code et demander à votre application de décider quel proc appeler au moment approprié.
C'est à peu près la limite pour structures de contrôle dans T-SQL , ainsi que GOTO et TOUT EN .
Non IF est le chemin à parcourir, quel est le problème que vous rencontrez avec son utilisation?
BTW votre exemple n'atteindra jamais le troisième bloc de code car il et le deuxième bloc sont exactement identiques.