Popis dávek
Dávky T-SQL jsou kolekce jednoho nebo více příkazů T-SQL odesílaných do SQL Serveru klientem jako jedna jednotka. SQL Server pracuje na všech příkazech v dávce současně při analýze, optimalizaci a spuštění kódu.
Pokud jste autor reportů, který obvykle píše dotazy pomocí SELECT příkazů a nikoli procedur, je stále důležité rozumět hranicím dávek. Tyto hranice ovlivňují vaši práci s proměnnými a parametry v uložených procedurách a dalších rutinách. Například proměnná musí být deklarována ve stejné dávce kódu, ve které je na ni odkazováno. Proto je důležité rozpoznat, co je obsaženo v dávce.
Dávky jsou určovány klientskou aplikací. Způsob označení konce dávky závisí na nastavení klienta. Pro klienty Microsoftu včetně aplikace SQL Server Management Studio (SSMS) a SQLCMD je GOklíčové slovo .
V tomto příkladu existují dvě samostatné dávky, které jsou ukončeny příkazem GO :
CREATE NEW <view_name>
AS ...
GO
CREATE PROCEDURE <procedure_name>
AS ...
GO
Ukončovač dávky GO není klíčovým slovem jazyka T-SQL, ale SSMS jej rozpoznává, aby označil konec dávky.
Při práci s dávkami T-SQL mějte na paměti dvě důležité aspekty:
- Dávky jsou hranice pro obor proměnných, což znamená, že na proměnnou definovanou v jedné dávce lze odkazovat pouze jiným kódem ve stejné dávce.
- Některé příkazy, obvykle příkazy definice dat, například
CREATE VIEW,CREATE FUNCTIONaCREATE PROCEDUREnelze je kombinovat s ostatními ve stejné dávce.
Práce s dávkami
Dávka je kolekce příkazů T-SQL odeslaných do SQL Serveru pro analýzu a spouštění. Pochopení způsobu zpracování dávek je užitečné při identifikaci chybových zpráv a chování. Když klient odešle dávku, například když v nástroji SSMS stisknete tlačítko Spustit, dávka se analyzuje kvůli chybám syntaxe modulem SQL Serveru. Všechny zjištěné chyby způsobí odmítnutí celé dávky; v dávce není žádné částečné spuštění příkazů.
Pokud dávka projde kontrolou syntaxe, SQL Server spustí další kroky, přiřazuje názvy objektů, zkontroluje oprávnění a optimalizuje kód pro spuštění. Jakmile se tento proces dokončí a spuštění začne, jednotlivé příkazy jsou buď úspěšné, nebo neúspěšné. Jedná se o důležitý kontrast ke kontrole syntaxe. Pokud dojde k chybě za běhu na jednom řádku, může se další řádek spustit, pokud do kódu nepřidáte zpracování chyb.
Například následující dávka obsahuje chybu syntaxe:
INSERT INTO dbo.t1 VALUE(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
Zobrazí se tato chybová zpráva:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'VALUE'.
Došlo k chybě na řádku 1, ale celá dávka je odmítnuta a provádění nepokračuje s řádkem 2. I kdyby byly všechny INSERT příkazy obráceny a k chybě syntaxe došlo ve druhém řádku, hlavní řádek by se nespustil, protože by byla odmítnuta celá dávka.
Naproti tomu tato opravená dávka neobsahuje chybu:
INSERT INTO dbo.t1 VALUES(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
Předchozí ukázky používají INSERT příkazy spíše než SELECT proto, že příkazy pro úpravy jsou častěji seskupené v dávkách.