Descrieți loturi

Finalizat

Loturile T-SQL sunt colecții de instrucțiuni T sau mai multe instrucțiuni T-SQL care sunt remise către SQL Server de un client ca o singură unitate. SQL Server operează în toate instrucțiunile dintr-un grup în același timp atunci când analiza, optimizarea și executarea codului.

Dacă sunteți scriitor de rapoarte care scrie de obicei interogări utilizând instrucțiuni SELECT și nu proceduri, este totuși important să înțelegeți limitele lotului. Aceste limite vor afecta lucrul dvs. cu variabile și parametri în procedurile stocate și alte rutine. De exemplu, o variabilă trebuie declarată în același lot la care se face referire. Este important, prin urmare, să recunoașteți ce este conținut într-un lot.

Loturile sunt delimitate de aplicația client. Modul în care marcați sfârșitul unui grup depinde de setările clientului. Pentru clienții Microsoft, inclusiv SQL Server Management Studio (SSMS), Azure Data Studio și SQLCMD, cuvântul cheie este GO.

În acest exemplu, există două loturi distincte, fiecare terminat cu un GO:

CREATE NEW <view_name>
AS ...
GO
CREATE PROCEDURE <procedure_name>
AS ...
GO

Terminatorul de grup GO nu este un cuvânt cheie T-SQL, dar este unul recunoscut de SSMS pentru a indica sfârșitul unui grup.

Atunci când lucrați cu grupuri T-SQL, există două considerații importante de reținut:

  • Loturile sunt limite pentru domeniul variabilei, ceea ce înseamnă că o variabilă definită într-un singur lot poate fi menționată numai de alt cod din același lot
  • Unele instrucțiuni, de obicei instrucțiuni de definiție de date, cum ar fi CREATE VIEW, CREATE FUNCTION și CREATE PROCEDURE, pot să nu fie combinate cu altele în același grup.

Lucrul cu grupuri

Un set este o colecție de instrucțiuni T-SQL remise către SQL Server pentru analiză și executare. Înțelegerea modului în care sunt analizate loturile va fi utilă în identificarea mesajelor de eroare și a comportamentului. Atunci când un grup este remis de un client, cum ar fi atunci când apăsați butonul Executare în SSMS, grupul este analizat pentru erorile de sintaxă de către motorul SQL Server. Toate erorile găsite vor face ca întregul lot să fie respins; nu va exista nicio executare parțială a instrucțiunilor din cadrul grupului.

Dacă grupul transmite verificarea sintaxei, SQL Server rulează alți pași, rezolvarea numelor obiectelor, verificarea permisiunilor și optimizarea codului pentru executare. După ce acest proces se termină și execuția începe, instrucțiunile reușesc sau nu reușesc individual. Acesta este un contrast important pentru verificarea sintaxei. Atunci când apare o eroare la momentul rulării pe o singură linie, următoarea linie poate fi executată, cu excepția cazului în care ați adăugat gestionarea erorilor la cod.

De exemplu, următorul grup conține o eroare de sintaxă:

INSERT INTO dbo.t1 VALUE(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO

Acesta oferă acest mesaj de eroare:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'VALUE'.

Eroarea a apărut în linia 1, dar întregul lot este respins, iar execuția nu continuă cu linia 2. Chiar dacă fiecare instrucțiune INSERT s-a inversat și eroarea de sintaxă s-a produs în a doua linie, prima linie nu s-ar executa, deoarece întregul lot ar fi respins.

Utilizând exemplul anterior, acest grup nu conține o eroare:

INSERT INTO dbo.t1 VALUES(1,2,N'abc');
INSERT INTO dbo.t1 VALUES(2,3,N'def');
GO

În eșantioanele anterioare, am utilizat instrucțiuni INSERT în loc de SELECT, deoarece este mai frecvent ca instrucțiunile de modificare să fie grupate în grupuri decât instrucțiunile SELECT.