Popis dávek

Dokončeno

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 FUNCTIONa CREATE PROCEDURE nelze 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.