アプリケーションにいくつかのルールがあり、そのルールのビジネス ロジックを手順に記述しました。プロシージャの作成時に、CASE
式が私のシナリオでは機能しないことがわかりました。そのため、以下に示すように、IF-ELSE-IF
またはを使用して同じ操作を実行する2つの方法を試しました。GOTO
方法 1 IF-ELSE-IF 条件を使用する:
DECLARE @V_RuleId SMALLINT;
IF (@V_RuleId = 1)
BEGIN
/*My business logic*/
END
ELSE IF (@V_RuleId = 2)
BEGIN
/*My business logic*/
END
ELSE IF (@V_RuleId = 3)
BEGIN
/*My business logic*/
END
/*
...
...
...
...*/
ELSE IF (@V_RuleId = 19)
BEGIN
/*My business logic*/
END
ELSE IF (@V_RuleId = 20)
BEGIN
/*My business logic*/
END
方法 2 GOTO ステートメントを使用する:
DECLARE @V_RuleId SMALLINT, @V_Temp VARCHAR(100);
SET @V_Temp = 'GOTO RULE' + CONVERT(VARCHAR, @V_RuleId);
EXECUTE sp_executesql @V_Temp;
RULE1:
BEGIN
/*My business logic*/
END
RULE2:
BEGIN
/*My business logic*/
END
RULE3:
BEGIN
/*My business logic*/
END
/*
...
...
...
...*/
RULE19:
BEGIN
/*My business logic*/
END
RULE20:
BEGIN
/*My business logic*/
END
今日は20のルールがあります。将来的にはいくらでも増やすことができます。CASE式が使えれば性能的には問題ないのですが、出来ないので手続きの性能が心配です。
また、この手順はアプリケーションによって非常に頻繁に実行されることに注意してください。
私の質問は:
プロシージャで CASE 式を使用する方法はありますか? そうでない場合、コードのパフォーマンスを向上させるために手順で使用するのに最適な方法はどれですか?