我正在使用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'
此脚本文件将在每次部署后执行,并且基于部署,它将跳过前几行,现在将到达标记15 。
即使只有几行代码,执行时间仍然很长,由于 GOTO语句,我终于找到了问题。我不知道使用GOTO是否是最佳做法,如果不是在生产现场使用GOTO的好习惯,那么请给我有关替代GOTO的建议。
答案 0 :(得分:1)
-- get the number of the marker (instead of the full name of the marker).
DECLARE @Marker INT = (SELECT REPLACE(Value, 'Marker', '') FROM Table1 WHERE name = 'Marker')
IF @Marker IS NULL
BEGIN
PRINT 'no marker'
END
IF @Marker < 1
BEGIN
-- Code for Marker No. 1
END
IF @Marker < 2
BEGIN
-- Code for Marker No. 2
END
IF @Marker < 3
BEGIN
-- Code for Marker No. 3
END
IF @Marker < 4
BEGIN
-- Code for Marker No. 4
END
ELSE IF @Marker IS NOT NULL
BEGIN
PRINT 'no changes'
END