Řízení toku programu pomocí bloků IF a WHILE
Všechny programovací jazyky obsahují prvky, které vám pomůžou určit tok programu nebo pořadí provádění příkazů. Jazyk T-SQL sice není tak plně funkční jako jazyky, jako je C#, ale poskytuje sadu klíčových slov toku řízení, která můžete použít k provádění logických testů a vytváření smyček obsahujících příkazy pro manipulaci s daty T-SQL. V této lekci se dozvíte, jak používat klíčová slova T-SQL IF a WHILE.
Vysvětlení řízení jazyka toku T-SQL
SQL Server poskytuje prvky jazyka, které řídí tok provádění programu v dávkách T-SQL, uložených procedurách a vícefaktorových uživatelem definovaných funkcích. Tyto prvky toku řízení znamenají, že můžete programově určit, jestli se mají spouštět příkazy, a programově určit pořadí těchto příkazů, které by se měly spustit.
Mezi tyto prvky patří:
- IF...ELSE, který spouští kód na základě Booleovského výrazu.
- WHILE, která vytvoří smyčku, jež se provádí za podmínky, že je pravdivá.
- ZAČÍT... END, který definuje řadu příkazů T-SQL, které by se měly spouštět společně.
- Další klíčová slova, například BREAK, CONTINUE, WAITFOR a RETURN, která se používají k podpoře operací řízení toku T-SQL.
Tady je příklad příkazu IF:
IF OBJECT_ID('dbo.tl') IS NOT NULL
DROP TABLE dbo.tl
GO
Používejte podmíněnou logiku ve svých programech pomocí KDYŽ...JINAK
Když... Struktura ELSE se v T-SQL používá k podmíněnému spuštění bloku kódu na základě predikátu. Příkaz IF určuje, zda ano nebo ne se následující příkaz nebo blok (pokud je použit BEGIN...END) vykoná. Pokud se predikát vyhodnotí jako PRAVDA, spustí se kód v bloku. Pokud se predikát vyhodnotí jako NEPRAVDA nebo NEZNÁMÝ, blok se nespustí, pokud se k identifikaci jiného bloku kódu nepoužívá volitelné klíčové slovo ELSE.
V následujícím příkazu IF kontrolujeme v databázi, zda je OBJECT_ID NULL, a pokud ano, vrátí se příkaz PRINT. V tomto příkladu objekt není null a tedy false, což znamená, že kód BEGIN/END se nespustí. Příkaz PRINT se spustí pouze v případě, že objekt v databázi neexistuje.
USE TSQL;
GO
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END;
Vzhledem k omezením výše uvedeného kódu s pouze příkazem IF to může být matoucí. Kombinace funkce KDYŽ a ELSE poskytuje větší flexibilitu s logikou v kódu a můžete použít více příkazů ELSE. Při použití struktury ELSE máte další možnost spuštění, když se predikát IF vyhodnotí jako NEPRAVDA nebo NEZNÁMÝ, jak je znázorněno v následujícím příkladu:
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END
ELSE
BEGIN
PRINT 'The specified object exists';
END;
V rámci operací manipulace s daty může být použití klíčového slova IF s klíčovým slovem EXISTS užitečným nástrojem pro efektivní kontroly existence, jak je znázorněno v následujícím příkladu:
IF EXISTS (SELECT * FROM Sales.EmpOrders WHERE empid =5)
BEGIN
PRINT 'Employee has associated orders';
END;
Porozumění smyčkám pomocí příkazů WHILE
Příkaz WHILE slouží ke spuštění kódu ve smyčce na základě predikátu. Podobně jako příkaz IF určuje příkaz WHILE, zda se vykoná následující příkaz nebo blok, pokud se použije BEGIN...END. Smyčka se spouští, dokud se podmínka vyhodnotí jako pravda. Obvykle řídíte smyčku s proměnnou testovanou predikátem a manipulovanou v těle samotné smyčky.
Následující příklad používá proměnnou @empid v predikátu a mění její hodnotu v bloku BEGIN...END.
DECLARE @empid AS INT = 1, @lname AS NVARCHAR(20);
WHILE @empid <=5
BEGIN
SELECT @lname = lastname FROM HR.Employees
WHERE empid = @empid;
PRINT @lname;
SET @empid += 1;
END;
Pro další možnosti ve smyčce WHILE můžete k řízení toku použít klíčová slova CONTINUE a BREAK.