Beskriv batches

Fuldført

T-SQL-batches er samlinger af en eller flere T-SQL-sætninger, der sendes til SQL Server af en klient som en enkelt enhed. SQL Server arbejder på alle sætninger i et batch på samme tid, når koden analyseres, optimeres og udføres.

Hvis du er rapportforfatter, der typisk skriver forespørgsler ved hjælp af SELECT erklæringer og ikke procedurer, er det stadig vigtigt at forstå batch-grænserne. Disse grænser påvirker dit arbejde med variable og parametre i lagrede procedurer og andre rutiner. En variabel skal f.eks. deklareres i den samme batch, som der refereres til. Det er derfor vigtigt at genkende, hvad der er indeholdt i en batch.

Batches afgrænses af klientprogrammet. Den måde, du markerer slutningen på et batch på, afhænger af klientens indstillinger. For Microsoft-klienter, herunder SQL Server Management Studio (SSMS) og SQLCMD, er GOnøgleordet .

I dette eksempel er der to forskellige batches, hver afsluttet med en GO sætning:

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

Go for batchafslutning er ikke et T-SQL-nøgleord, men det genkendes af SSMS for at angive slutningen af et batch.

Husk to vigtige overvejelser, når du arbejder med T-SQL-batches:

  • Batches er grænser for variabelomfang, hvilket betyder, at en variabel defineret i én batch kun kan refereres af anden kode i samme batch
  • Nogle udsagn, typisk datadefinitionsudsagn som CREATE VIEW, CREATE FUNCTION, kan CREATE PROCEDURE ikke kombineres med andre i samme batch.

Arbejde med batches

Et batch er en samling T-SQL-sætninger, der er sendt til SQL Server til fortolkning og udførelse. At forstå, hvordan batches bliver parset, er nyttigt til at identificere fejlmeddelelser og adfærd. Når en batch sendes af en klient, f.eks. når du trykker på knappen Udfør i SSMS, fortolkes batchen for syntaksfejl af SQL Server-programmet. Eventuelle fejl, der findes, får hele batchen til at blive afvist; Der er ingen delvis udførelse af udsagn inden for batchet.

Hvis batchen passerer syntakskontrollen, kører SQL Server andre trin, løser objektnavne, kontrollerer tilladelser og optimerer koden til udførelse. Når denne proces er fuldført, og udførelsen starter, lykkes eller mislykkes sætninger individuelt. Dette er en vigtig kontrast til syntakskontrollen. Når der opstår en runtime-fejl på én linje, kan den næste linje stadig køre, medmindre du tilføjer fejlhåndtering til koden.

Følgende batch indeholder f.eks. en syntaksfejl:

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

Den giver denne fejlmeddelelse:

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

Fejlen opstod i linje 1, men hele batchen afvises, og udførelsen fortsætter ikke med linje 2. Selv hvis hver af sætningerne INSERT blev vendt om, og syntaksfejlen opstod i anden linje, ville frontlinjen ikke blive udført, fordi hele batchen ville blive afvist.

Til sammenligning indeholder denne korrigerede batch ikke en fejl:

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

De tidligere eksempler bruger INSERT udsagn i stedet for SELECT at modifikationsudsagn oftere grupperes i batches.