Kötegek leírása

Befejezett

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és CREATE PROCEDURE nem 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.