程式會直接跳到GOTO所指定的標籤位置,中間跳過的區域全都不執行。
結構複雜的程式碼非常不建議使用,因為容易造成流程混亂!
如需進行流程控制,建議使用IF條件判斷較佳。
語法
1
2
3
4
Label: --設定標籤
/*很多行程式碼*/
GOTO Label --跳到標籤
/*很多行程式碼*/
範例1:GOTO用於循環
1
2
3
4
5
6
7
declare @i int = 1 --宣告變數i,初始值為1
loopstart: --設定標籤
begin
print @i --顯示i值
set @i += 1 --設定變數i+1
while (@i <= 10) goto loopstart --跳到loopstart標籤
end
執行結果:印出1~10
範例2:GOTO求總和
利用GOTO語句求出從1加到5的總和
1
2
3
4
5
6
declare @i int = 1, @sum int = 0
loopstart: --設定標籤
set @sum += @i --加總
set @i += 1 --設定變數i+1
if(@i < 5) goto loopstart --跳到loopstart標籤
print @sum --印出總和
執行結果: 15
注意:
標籤位置的程式碼不單單是跳轉執行,程式自上往下正常運作時,到達標籤處也會執行的,
所以標籤的程式碼作用如果用於錯誤判斷或交易提交的話,通常會放在程式碼的結尾,比如:
1
2
3
4
5
6
7
8
9
10
11
12
--標籤的程式碼作用如果用於錯誤判斷或交易提交的話,
--通常會放在程式碼的結尾
OK: --程式正常運作到結尾時會執行
COMMIT TRAN
SELECT 0
RETURN --return 作用是避免 ERR:標籤被執行
ERR: --僅用於goto跳躍呼叫
ROLLBACK TRAN
SELECT -1
RETURN
上面程式碼通常放置預存程序的末尾,用於標籤跳轉。
其中 OK: 是程式正常運作到結尾時會執行,
其retrun 的作用 是避免 標籤 ERR: 被執行,
因此,標籤ERR: 僅用於GOTO 跳躍呼叫。
MSDN - GOTO (Transact-SQL)
MSSQL中的 GOTO 语句
PL/SQL goto语句
[T-SQL] T-SQL 基本介紹_筆記