Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara Menggunakan GOTO di SQL Server

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!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ATAU tidak didukung dengan Pernyataan KASUS di SQL Server

  2. Konkurensi optimis:IsConcurrencyToken dan RowVersion

  3. Peningkatan Kinerja &Pengelolaan Tersembunyi di SQL Server 2012/2014

  4. Tetapkan nilai awal untuk kolom dengan peningkatan otomatis

  5. Ketika prinsip KERING tidak berlaku:operasi BITWISE di SQL Server