gpt4 book ai didi

sql - CASE vs IF-ELSE-IF vs GOTO 关键字

转载 作者:行者123 更新时间:2023-12-04 02:52:34 24 4
gpt4 key购买 nike

我的应用程序中有一些规则,我已经在我的过程中编写了这些规则的业务逻辑。在创建过程时,我开始知道 CASE 表达式在我的场景中不起作用。所以我尝试了两种方法来执行相同的操作(使用 IF-ELSE-IFGOTO),如下所示。

方法 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

方法二使用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 表达式吗?如果不是,我的程序中最好使用哪种方法来提高我的代码的性能?

最佳答案

试试这个 -

DECLARE @V_RuleId SMALLINT
SELECT @V_RuleId = 1;

DECLARE @temp TABLE
(
RuleID INT
, Query NVARCHAR(MAX)
)

INSERT INTO @temp (RuleID, Query)
VALUES
(1, 'EXEC dbo.usp_test1;'),
(2, 'CREATE TABLE dbo.Table1 (ID INT);'),
(3, 'DROP TABLE dbo.Table1;')

DECLARE @SQL NVARCHAR(MAX)

SELECT @SQL = Query
FROM @temp
WHERE RuleID = @V_RuleId

PRINT @SQL

EXEC sys.sp_executesql @SQL

关于sql - CASE vs IF-ELSE-IF vs GOTO 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17377728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com