SQL Server 公用程式陳述式 - GO
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Microsoft Fabric 中的 SQL 分析端點 Microsoft Fabric 中的倉儲
SQL Server 提供的命令不是 Transact-SQL 陳述式,但可由 sqlcmd 和 osql 公用程式以及 SQL Server Management Studio 程式碼編輯器所辨識。 這些命令可用來簡化批次和指令碼的可讀性與執行。
GO 會向 SQL Server 公用程式發出 Transact-SQL 陳述式批次結束的信號。
語法
GO [count]
引數
計數
這是正整數。 在 GO 之前的批次將會執行指定的次數。
備註
GO 不是 Transact-SQL 陳述式,而是可由 sqlcmd 和 osql 公用程式以及 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