GO (Transact-SQL)

Transact-SQL ステートメントのバッチの終了を SQL Server ユーティリティに通知します。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

GO [count]

引数

  • count
    正の整数を指定します。 GO の前のバッチが、指定された回数実行されます。

説明

GO は Transact-SQL ステートメントではなく、sqlcmd および osql ユーティリティと SQL Server Management Studio コード エディターで認識されるコマンドです。

SQL Server のユーティリティでは、GO は、現在の Transact-SQL ステートメントのバッチを SQL Server インスタンスに送信するためのシグナルとして解釈されます。 現在のステートメントのバッチは、前回の GO の後に入力されたすべてのステートメントで構成されます。最初の GO の場合、現在のバッチは、アドホック セッションまたはスクリプトの開始後に入力されたすべてのステートメントで構成されます。

Transact-SQL ステートメントを GO コマンドと同じ行に入力することはできません。 ただし、GO コマンドの行にコメントは入力できます。

ユーザーは、バッチの規則に従う必要があります。 たとえば、バッチの最初のステートメント以降でストアド プロシージャを実行する場合は、バッチに EXECUTE キーワードを含める必要があります。 ローカル (ユーザー定義) 変数のスコープはバッチ内に限られ、GO コマンドの後では参照できません。

USE AdventureWorks2012;
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 インスタンスに送信し、バッチとして実行できます。 バッチ内のステートメントは、1 つの実行プランにコンパイルされます。 SQL Server のユーティリティでアドホック ステートメントを実行する場合、または SQL Server ユーティリティを介して実行する Transact-SQL ステートメントのスクリプトを作成する場合、プログラマは GO を使用してバッチの終了を知らせる必要があります。

ODBC または OLE DB API に基づくアプリケーションで、GO コマンドを実行しようとすると、構文エラーになります。 SQL Server のユーティリティからサーバーに GO コマンドが送信されることはありません。

権限

GO は、権限を必要としないユーティリティ コマンドです。 すべてのユーザーが実行できます。

使用例

次の例では、2 つのバッチを作成します。 最初のバッチは、データベース コンテキストを設定する USE AdventureWorks2012 ステートメントのみで構成されます。 その他のステートメントではローカル変数が使用されます。 このため、すべてのローカル変数宣言を 1 つのバッチにまとめる必要があります。 これには、変数を参照する最後のステートメントが実行されてから GO コマンドを実行するようにします。

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