由于GOTO语句导致的性能问题

问题描述 投票:0回答:1

我正在使用SQL Server 2016数据库项目,而我的脚本如下所示

DECLARE Marker NVARCHAR(50) = (SELECT Value FROM Table1 WHERE name = 'Marker') 
IF( IS NOT NULL)
BEGIN
    IF @Marker = 'Marker1' GOTO Marker2;
    IF @Marker = 'Marker2' GOTO Marker3;
    IF @Marker = 'Marker3' GOTO Marker4;
    IF @Marker = 'Marker4' GOTO Marker5;
    IF @Marker = 'Marker5' GOTO Marker6;
    IF @Marker = 'Marker6' GOTO Marker7;        
    ELSE GOTO EmptyBlock;    
END 

MARKER1:
Code for marker 1

MARKER2:
Code for marker 2    

MARKER3:
Code for marker 3
.
.
.
EmptyBlock:
PRINT 'No changes'

此脚本文件将在每次部署后执行,并且基于部署,它将跳过前几行,现在将到达marker 15

尽管只有很少的代码行,但是执行仍然花费太多时间,由于GOTO语句,我终于发现了这个问题。我不知道使用GOTO是否是最佳实践,如果不是在生产现场使用GOTO的良好实践,那么请给我有关替代GOTO的建议。

sql-server database-project tsqlt
1个回答
0
投票

您可以使用GOTO将这样的脚本替换为IF语句:

DECLARE @Marker INT = (SELECT REPLACE(Value, 'Marker', '') FROM Table1 WHERE name = 'Marker')

IF @Marker <= 1
  -- Code for Marker No. 1
IF @Marker <= 2
  -- Code for Marker No. 2
ELSE
  PRINT 'no changes'
© www.soinside.com 2019 - 2024. All rights reserved.