sql >> Databáze >  >> RDS >> Sqlserver

Jak používat GOTO v SQL Server

V SQL Server můžete použít GOTO změnit tok provádění. Můžete jej použít k „skočení“ do jiné části kódu T-SQL.

Funguje to tak, že vytvoříte štítek a poté můžete použít GOTO skočit na ten štítek. Jakýkoli kód mezi GOTO a štítek jsou přeskočeny a zpracování pokračuje na štítku.

GOTO příkazy a štítky lze použít kdekoli v rámci procedury, dávky nebo bloku příkazů. Mohou být také vnořené.

Příklad 1 – Základní použití

Zde je základní příklad k demonstraci.

PRINT 1
PRINT 2
PRINT 3
GOTO Bookmark
PRINT 4
PRINT 5
Bookmark:
PRINT 6

Výsledek:

1
2
3
6

Příklad 2 – Štítky musí být jedinečné

Každý štítek musí být jedinečný v rámci dávky dotazu nebo uložené procedury.

Zde je návod, co se stane, pokud stejný štítek poskytnete více než jednou.

PRINT 1
PRINT 2
PRINT 3
GOTO Bookmark
PRINT 4
Bookmark:
PRINT 5
Bookmark:
PRINT 6

Výsledek:

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.

Příklad 3 – Štítky mimo šarži

Štítek musí být ve stejné dávce jako GOTO . Nemůže přejít na štítek mimo aktuální dávku.

Zde je příklad pokusu o přechod na štítek v jiné dávce:

PRINT 1
PRINT 2
PRINT 3
GOTO Bookmark
PRINT 4
GO

PRINT 5
Bookmark:
PRINT 6
GO

Výsledek:

Msg 133, Level 15, State 1, Line 6
A GOTO statement references the label 'Bookmark' but the label has not been declared.

V tomto případě jsem použil GO příkaz k rozdělení kódu do dvou dávek.

Příklad 4 – GOTO v příkazu IF

Můžete použít GOTO v IF tak, že skočí na danou část kódu v závislosti na tom, zda je podmínka pravdivá.

Zde jsem nastavil @color proměnná na Red a tak kód skočí na 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!';

Výsledek:

Red Team
Finished!

Zde je to, co se stane, když nastavím @color na 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!';

Výsledek:

Blue Team
Finished!

A pro úplnost uvádíme, co se stane, když poskytnu jinou barvu:

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!';

Výsledek:

Other Team
Finished!

Toto jsou samozřejmě velmi jednoduché příklady, ale demonstrují základní koncept GOTO .

Příklad 5 – Umístění štítku

GOTO větvení může přejít na štítek definovaný před nebo za GOTO .

Zde je příklad přechodu na štítek před 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!'

Výsledek:

1
2
3
4
5
6
7
8
9
Finished!

Musíte být opatrní, abyste při umístění štítku před GOTO nezačali nekonečnou smyčku ačkoli.

Tento příklad je také pouze pro demonstrační účely. Stejný výsledek můžete získat pomocí WHILE smyčka:

DECLARE @Counter int = 1;

WHILE @Counter < 10
BEGIN
  PRINT @Counter
  SET @Counter = @Counter + 1
END
PRINT 'Finished!'

Výsledek:

1
2
3
4
5
6
7
8
9
Finished!

  1. Snímky databáze SQL Server -2

  2. PostgreSQL streamovací replikace – hluboký ponor

  3. Funkce hesla MySQL

  4. Zálohujte jednu tabulku s jejími daty z databáze na serveru SQL Server 2008