Dela via


SQL Server-verktygsinstruktioner – GO

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Förhandsversion av Microsoft Fabric

SQL Server tillhandahåller kommandon som inte är Transact-SQL-instruktioner, men som identifieras av sqlcmd - och osql-verktygen och SQL Server Management Studio Code Editor. Dessa kommandon kan användas för att underlätta läsbarhet och körning av batchar och skript.

GO signalerar slutet på en batch med Transact-SQL-instruktioner till SQL Server-verktygen.

Transact-SQL syntaxkonventioner

Syntax

GO [count]  

Arguments

count
Är ett positivt heltal. Batchen före GO kör det angivna antalet gånger.

Remarks

GO är inte en Transact-SQL-instruktion. det är ett kommando som identifieras av sqlcmd - och osql-verktygen och SQL Server Management Studio Code-redigeraren.

SQL Server-verktyg tolkar GO som en signal om att de ska skicka den aktuella batchen med Transact-SQL-instruktioner till en instans av SQL Server. Den aktuella batchen med -instruktioner består av alla instruktioner som angetts sedan den senaste GO-versionen, eller sedan ad hoc-sessionen eller skriptet startades om detta är den första GO-filen.

En Transact-SQL-instruktion kan inte uppta samma rad som ett GO-kommando. Raden kan dock innehålla kommentarer.

Användarna måste följa reglerna för batchar. En körning av en lagrad procedur efter den första instruktionen i en batch måste till exempel innehålla nyckelordet EXECUTE. Omfattningen för lokala (användardefinierade) variabler är begränsad till en batch och kan inte refereras efter ett GO-kommando.

USE AdventureWorks2022;  
GO  
DECLARE @MyMsg VARCHAR(50)  
SELECT @MyMsg = 'Hello, World.'  
GO -- @MyMsg is not valid after this GO ends the batch.  
  
-- Yields an error because @MyMsg not declared in this batch.  
PRINT @MyMsg  
GO  
  
SELECT @@VERSION;  
-- Yields an error: Must be EXEC sp_who if not first statement in   
-- batch.  
sp_who  
GO  

SQL Server-program kan skicka flera Transact-SQL-instruktioner till en instans av SQL Server för körning som en batch. -uttrycken i batchen kompileras sedan till en enda körningsplan. Programmerare som kör ad hoc-instruktioner i SQL Server-verktygen eller skapar skript för Transact-SQL-instruktioner för att köra genom SQL Server-verktygen använder GO för att signalera slutet på en batch.

Program baserade på ODBC- eller OLE DB-API:erna får ett syntaxfel om de försöker köra ett GO-kommando. SQL Server-verktygen skickar aldrig ett GO-kommando till servern.

Använd inte semikolon som instruktionsavslutare efter GO.

-- Yields an error because ; is not permitted after GO  
SELECT @@VERSION;  
GO;  

I SQL-frågeredigeraren för Microsoft Fabric-portalen körs varje SQL-instruktion som en oberoende session. Sessionskontexten bevaras inte i SQL-uttryck. Mer information finns i SQL-frågeredigeraren.

Permissions

GO är ett verktygskommando som inte kräver några behörigheter. Den kan köras av alla användare.

Examples

I följande exempel skapas två batchar. Den första batchen innehåller bara en USE AdventureWorks2022 -instruktion för att ange databaskontexten. De återstående uttrycken använder en lokal variabel. Därför måste alla lokala variabeldeklarationer grupperas i en enda batch. Detta görs genom att inte ha ett GO kommando förrän efter den sista instruktionen som refererar till variabeln.

USE AdventureWorks2022;  
GO  
DECLARE @NmbrPeople INT  
SELECT @NmbrPeople = COUNT(*)  
FROM Person.Person;  
PRINT 'The number of people as of ' +  
      CAST(GETDATE() AS CHAR(20)) + ' is ' +  
      CAST(@NmbrPeople AS CHAR(10));  
GO  

I följande exempel körs -uttrycken i batchen två gånger.

SELECT DB_NAME();  
SELECT USER_NAME();  
GO 2