Di SQL Server, Anda dapat menggunakan GOTO
untuk mengubah aliran eksekusi. Anda dapat menggunakannya untuk "melompat" ke bagian lain dalam kode T-SQL.
Cara kerjanya adalah, Anda membuat label, kemudian Anda dapat menggunakan GOTO
untuk melompat ke label itu. Kode apa pun di antara GOTO
dan label dilewati, dan pemrosesan berlanjut di label.
GOTO
pernyataan dan label dapat digunakan di mana saja dalam prosedur, batch, atau blok pernyataan. Mereka juga dapat disarangkan.
Contoh 1 – Penggunaan Dasar
Berikut adalah contoh dasar untuk didemonstrasikan.
PRINT 1 PRINT 2 PRINT 3 GOTO Bookmark PRINT 4 PRINT 5 Bookmark: PRINT 6
Hasil:
1 2 3 6
Contoh 2 – Label Harus Unik
Setiap label harus unik dalam kumpulan kueri atau prosedur tersimpan.
Inilah yang terjadi jika Anda memberikan label yang sama lebih dari sekali.
PRINT 1 PRINT 2 PRINT 3 GOTO Bookmark PRINT 4 Bookmark: PRINT 5 Bookmark: PRINT 6
Hasil:
Msg 132, Level 15, State 1, Line 8 The label 'Bookmark' has already been declared. Label names must be unique within a query batch or stored procedure.
Contoh 3 – Label Out-of-Batch
Label harus berada dalam kelompok yang sama dengan GOTO
. Itu tidak bisa masuk ke label di luar kumpulan saat ini.
Berikut ini contoh mencoba membuka label di batch lain:
PRINT 1 PRINT 2 PRINT 3 GOTO Bookmark PRINT 4 GO PRINT 5 Bookmark: PRINT 6 GO
Hasil:
Msg 133, Level 15, State 1, Line 6 A GOTO statement references the label 'Bookmark' but the label has not been declared.
Dalam hal ini, saya menggunakan GO
perintah untuk memisahkan kode menjadi dua kumpulan.
Contoh 4 – GOTO Dalam Pernyataan JIKA
Anda dapat menggunakan GOTO
dalam IF
pernyataan, sehingga melompat ke bagian kode tertentu tergantung pada kondisi yang benar.
Di sini saya mengatur @color
variabel menjadi Red
dan kode melompat ke Red_Team
.
DECLARE @color varchar(50) = 'Red'; IF @color = 'Red' GOTO Red_Team IF @color = 'Blue' GOTO Blue_Team ELSE GOTO Other_Team Red_Team: PRINT 'Red Team'; GOTO Finish_Line Blue_Team: PRINT 'Blue Team'; GOTO Finish_Line Other_Team: PRINT 'Other Team'; GOTO Finish_Line Finish_Line: PRINT 'Finished!';
Hasil:
Red Team Finished!
Inilah yang terjadi jika saya mengatur @color
menjadi Blue
:
DECLARE @color varchar(50) = 'Blue'; IF @color = 'Red' GOTO Red_Team IF @color = 'Blue' GOTO Blue_Team ELSE GOTO Other_Team Red_Team: PRINT 'Red Team'; GOTO Finish_Line Blue_Team: PRINT 'Blue Team'; GOTO Finish_Line Other_Team: PRINT 'Other Team'; GOTO Finish_Line Finish_Line: PRINT 'Finished!';
Hasil:
Blue Team Finished!
Dan demi kelengkapan, inilah yang terjadi jika saya memberikan warna yang berbeda:
DECLARE @color varchar(50) = 'Orange'; IF @color = 'Red' GOTO Red_Team IF @color = 'Blue' GOTO Blue_Team ELSE GOTO Other_Team Red_Team: PRINT 'Red Team'; GOTO Finish_Line Blue_Team: PRINT 'Blue Team'; GOTO Finish_Line Other_Team: PRINT 'Other Team'; GOTO Finish_Line Finish_Line: PRINT 'Finished!';
Hasil:
Other Team Finished!
Jelas ini adalah contoh yang sangat sederhana, tetapi mereka menunjukkan konsep dasar GOTO
.
Contoh 5 – Label Posisi
GOTO
percabangan dapat pergi ke label yang ditentukan sebelum atau sesudah GOTO
.
Berikut ini contoh membuka label sebelum GOTO
:
DECLARE @Counter int = 0; Loop: SET @Counter = @Counter + 1 IF @Counter < 10 PRINT @Counter ELSE GOTO Finish_Line GOTO Loop Finish_Line: PRINT 'Finished!'
Hasil:
1 2 3 4 5 6 7 8 9 Finished!
Anda harus berhati-hati untuk tidak memulai infinite loop saat menempatkan label sebelum GOTO
meskipun.
Juga, contoh ini hanya untuk tujuan demonstrasi. Anda bisa mendapatkan hasil yang sama menggunakan WHILE
lingkaran:
DECLARE @Counter int = 1; WHILE @Counter < 10 BEGIN PRINT @Counter SET @Counter = @Counter + 1 END PRINT 'Finished!'
Hasil:
1 2 3 4 5 6 7 8 9 Finished!