我正在使用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的建议。
您可以使用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'