分享方式:


SQL Server 公用程式陳述式 - GO

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Microsoft Fabric 中的 SQL 分析端點 Microsoft Fabric 中的倉儲

SQL Server 提供的命令不是 Transact-SQL 陳述式,但可由 sqlcmdosql 公用程式以及 SQL Server Management Studio 程式碼編輯器所辨識。 這些命令可用來簡化批次和指令碼的可讀性與執行。

GO 會向 SQL Server 公用程式發出 Transact-SQL 陳述式批次結束的信號。

Transact-SQL 語法慣例

語法

GO [count]  

引數

計數
這是正整數。 在 GO 之前的批次將會執行指定的次數。

備註

GO 不是 Transact-SQL 陳述式,而是可由 sqlcmdosql 公用程式以及 SQL Server Management Studio 程式碼編輯器所辨識的命令。

SQL Server 公用程式會將 GO 解譯成應該將目前的 Transact-SQL 陳述式批次傳送給 SQL Server 執行個體的信號。 目前的陳述式批次由在上一個 GO 之後輸入的所有陳述式組成;如果是第一個 GO,便是從特定工作階段或指令碼開始之後輸入的所有陳述式組成。

Transact-SQL 陳述式不能和 GO 命令佔用同一行。 不過,這一行可包含註解。

使用者必須遵照批次的規則。 例如,在批次內第一個陳述式之後,執行預存程序都必須包括 EXECUTE 關鍵字。 本機 (使用者自訂) 變數的範圍只限於批次,在 GO 命令之後,便不能參考它。

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 應用程式可以將多個 Transact-SQL 陳述式傳送給 SQL Server 執行個體,以批次方式加以執行。 之後,會將批次中的這些陳述式編譯成單一執行計畫。 如果程式設計人員要在 SQL Server 公用程式內執行隨選陳述式,或建置要在 SQL Server 公用程式中執行的 Transact-SQL 陳述式指令碼,可利用 GO 來作為批次結束的信號。

如果以 ODBC 或 OLE DB API 為基礎的應用程式試圖執行 GO 命令,就會收到語法錯誤。 SQL Server 公用程式永遠不會將 GO 命令傳給伺服器。

請勿在 GO 之後以分號做為陳述式結束字元。

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

在Microsoft網狀架構入口網站 SQL 查詢編輯器中,每個 SQL 語句都會以獨立會話的形式執行。 會話內容不會跨 SQL 語句保存。 如需詳細資訊,請參閱 SQL 查詢編輯器

權限

GO 是不需要任何權限的公用程式命令。 任何使用者都可以執行它。

範例

下列範例會建立兩個批次。 第一個批次只包含用來設定資料庫內容的 USE AdventureWorks2022 陳述式。 其餘陳述式使用本機變數。 因此,所有本機變數宣告都必須分組在單一批次中。 方式是將 GO 命令放在參考變數的最後一個陳述式之後。

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  

下列範例會以批次執行陳述式兩次。

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