SQL Server のユーティリティのステートメント - GOSQL Server Utilities Statements - GO

適用対象:○SQL Server (2008 以降)×Azure SQL Database×Azure SQL Data Warehouse ×Parallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

SQL ServerSQL Server には、 Transact-SQLTransact-SQL ステートメントではありませんが、sqlcmd ユーティリティ、osql ユーティリティ、および SQL Server Management StudioSQL Server Management Studio のコード エディターで認識されるコマンドがあります。 provides commands that are not Transact-SQLTransact-SQL statements, but are recognized by the sqlcmd and osql utilities and SQL Server Management StudioSQL Server Management Studio Code Editor. これらのコマンドを使用すると、バッチおよびスクリプトの読み取りと実行が容易になります。These commands can be used to facilitate the readability and execution of batches and scripts.

GO は、 Transact-SQLTransact-SQL ステートメントのバッチの終了を SQL ServerSQL Server ユーティリティに通知します。GO signals the end of a batch of Transact-SQLTransact-SQL statements to the SQL ServerSQL Server utilities.

トピック リンク アイコン Transact-SQL 構文表記規則Topic link icon Transact-SQL Syntax Conventions


GO [count]  


正の整数を指定します。Is a positive integer. GO の前のバッチが、指定された回数実行されます。The batch preceding GO will execute the specified number of times.


GO は Transact-SQLTransact-SQL ステートメントではなく、sqlcmd および osql ユーティリティと SQL Server Management StudioSQL Server Management Studio コード エディターで認識されるコマンドです。GO is not a Transact-SQLTransact-SQL statement; it is a command recognized by the sqlcmd and osql utilities and SQL Server Management StudioSQL Server Management Studio Code editor.

SQL ServerSQL Server のユーティリティでは、GO は、現在の Transact-SQLTransact-SQL ステートメントのバッチを SQL ServerSQL Server インスタンスに送信するためのシグナルとして解釈されます。 utilities interpret GO as a signal that they should send the current batch of Transact-SQLTransact-SQL statements to an instance of SQL ServerSQL Server. 現在のステートメントのバッチは、前回の GO の後に入力されたすべてのステートメントで構成されます。最初の GO の場合、現在のバッチは、アドホック セッションまたはスクリプトの開始後に入力されたすべてのステートメントで構成されます。The current batch of statements is composed of all statements entered since the last GO, or since the start of the ad hoc session or script if this is the first GO.

Transact-SQLTransact-SQL ステートメントを GO コマンドと同じ行に入力することはできません。A Transact-SQLTransact-SQL statement cannot occupy the same line as a GO command. ただし、GO コマンドの行にコメントは入力できます。However, the line can contain comments.

ユーザーは、バッチの規則に従う必要があります。Users must follow the rules for batches. たとえば、バッチの最初のステートメント以降でストアド プロシージャを実行する場合は、バッチに EXECUTE キーワードを含める必要があります。For example, any execution of a stored procedure after the first statement in a batch must include the EXECUTE keyword. ローカル (ユーザー定義) 変数のスコープはバッチ内に限られ、GO コマンドの後では参照できません。The scope of local (user-defined) variables is limited to a batch, and cannot be referenced after a GO command.

USE AdventureWorks2012;  
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  

-- Yields an error: Must be EXEC sp_who if not first statement in   
-- batch.  

SQL ServerSQL Server アプリケーションでは、複数の Transact-SQLTransact-SQL ステートメントを SQL ServerSQL Server インスタンスに送信し、バッチとして実行できます。 applications can send multiple Transact-SQLTransact-SQL statements to an instance of SQL ServerSQL Server for execution as a batch. バッチ内のステートメントは、1 つの実行プランにコンパイルされます。The statements in the batch are then compiled into a single execution plan. SQL ServerSQL Server ユーティリティでアドホック ステートメントを実行する場合、または Transact-SQLTransact-SQL ユーティリティを介して実行する SQL ServerSQL Server ステートメントのスクリプトを作成する場合、プログラマは GO を使用してバッチの終了を知らせる必要があります。Programmers executing ad hoc statements in the SQL ServerSQL Server utilities, or building scripts of Transact-SQLTransact-SQL statements to run through the SQL ServerSQL Server utilities, use GO to signal the end of a batch.

ODBC または OLE DB API に基づくアプリケーションで、GO コマンドを実行しようとすると、構文エラーになります。Applications based on the ODBC or OLE DB APIs receive a syntax error if they try to execute a GO command. SQL ServerSQL Server ユーティリティは、サーバーに GO コマンドを送信することはありません。The SQL ServerSQL Server utilities never send a GO command to the server.

移動した後、ステートメントのターミネータとしてセミコロンを使用しません。Do not use a semicolon as a statement terminator after GO.


GO は、権限を必要としないユーティリティ コマンドです。GO is a utility command that requires no permissions. すべてのユーザーが実行できます。It can be executed by any user.

-- Yields an error because ; is not permitted after GO  


次の例では、2 つのバッチを作成します。The following example creates two batches. 最初のバッチは、データベース コンテキストを設定する USE``AdventureWorks2012 ステートメントのみで構成されます。The first batch contains only a USE``AdventureWorks2012 statement to set the database context. その他のステートメントではローカル変数が使用されます。The remaining statements use a local variable. このため、すべてのローカル変数宣言を 1 つのバッチにまとめる必要があります。Therefore, all local variable declarations must be grouped in a single batch. これには、変数を参照する最後のステートメントが実行されてから GO コマンドを実行するようにします。This is done by not having a GO command until after the last statement that references the variable.

USE AdventureWorks2012;  
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));  

次の例は、2 回、バッチ内のステートメントを実行します。The following example executes the statements in the batch twice.

GO 2