Kötegek leírása
A T-SQL-kötegek egy vagy több T-SQL-utasítás gyűjteményei, amelyeket egy ügyfél egyetlen egységként küld el az SQL Servernek. Az SQL Server egy köteg összes utasításán egyszerre működik a kód elemzése, optimalizálása és végrehajtása során.
Ha ön jelentésíró, aki általában utasítások és nem eljárások használatával SELECT ír lekérdezéseket, akkor is fontos megérteni a köteghatárokat. Ezek a határok befolyásolják a változókkal és paraméterekkel végzett munkát a tárolt eljárásokban és egyéb rutinokban. Egy változót például ugyanabban a kötegben kell deklarálni, amelyben hivatkozik rá. Ezért fontos felismerni, hogy mi található egy kötegben.
A kötegeket az ügyfélalkalmazás tagolja. A köteg végének megjelölése az ügyfél beállításaitól függ. A Microsoft kliensek, beleértve az SQL Server Management Studio (SSMS) és az SQLCMD, esetében a kulcsszó GO.
Ebben a példában két különböző köteg van, amelyek mindegyike egy GO utasítással végződik:
CREATE NEW <view_name>
AS ...
GO
CREATE PROCEDURE <procedure_name>
AS ...
GO
A batch végződésjelzője, GO, nem T-SQL-kulcsszó, hanem az SSMS által a köteg végét jelölő elemként van felismerve.
A T-SQL-kötegek használatakor tartsa szem előtt két fontos szempontot:
- A kötegek a változó hatókörének határai, ami azt jelenti, hogy egy kötegben definiált változóra csak egy köteg más kódja hivatkozhat
- Egyes utasítások, általában adatdefiníciós utasítások, például
CREATE VIEW,CREATE FUNCTIONésCREATE PROCEDUREnem kombinálhatók másokkal ugyanabban a kötegben.
Kötegek használata
A köteg az SQL Servernek elemzésre és végrehajtásra küldött T-SQL-utasítások gyűjteménye. A kötegek elemzésének megértése hasznos a hibaüzenetek és a viselkedés azonosításában. Amikor egy ügyfél elküld egy köteget, például amikor lenyomja az Végrehajtás gombot az SSMS-ben, a köteg az SQL Server-motor szintaxishibáit elemzi. A talált hibák a teljes köteg elutasítását okozzák; a kötegben nem történik utasítások részleges végrehajtása.
Ha a köteg megfelel a szintaxis-ellenőrzésnek, akkor az SQL Server más lépéseket is futtat, feloldja az objektumneveket, ellenőrzi az engedélyeket, és optimalizálja a kódot a végrehajtáshoz. A folyamat befejeződése és a végrehajtás megkezdése után az utasítások egyenként sikeresek vagy sikertelenek lesznek. Ez fontos ellentétben áll a szintaxis-ellenőrzéssel. Ha futásidejű hiba történik egy sorban, a következő sor továbbra is végrehajtható, hacsak nem ad hozzá hibakezelést a kódhoz.
A következő csomag például szintaxishibát tartalmaz:
INSERT INTO dbo.t1 VALUE(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
Ez a hibaüzenet jelenik meg:
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'VALUE'.
A hiba az 1. sorban történt, de a teljes köteg elutasításra kerül, és a végrehajtás nem folytatódik a 2. sorral. Még ha az összes INSERT utasítást meg is fordították, és a szintaxishiba a második sorban történt, az első sor nem lesz végrehajtva, mert az egész köteg el lesz utasítva.
Ezzel szemben ez a kijavított köteg nem tartalmaz hibát:
INSERT INTO dbo.t1 VALUES(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO
Az előző minták azért használnak INSERT utasításokat, mert a módosítási utasítások SELECT gyakrabban kötegekbe vannak csoportosítva.