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 AdventureWorks;
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``AdventureWorks ステートメントのみで構成されます。その他のステートメントではローカル変数が使用されます。このため、すべてのローカル変数宣言を 1 つのバッチにまとめる必要があります。これには、変数を参照する最後のステートメントが実行されてから GO コマンドを実行するようにします。

USE AdventureWorks;
GO
DECLARE @NmbrContacts int
SELECT @NmbrContacts = COUNT(*)
FROM Person.Contact
PRINT 'The number of contacts as of ' +
      CAST(GETDATE() AS char(20)) + ' is ' +
      CAST(@NmbrContacts AS char (10))
GO

参照

その他の技術情報

バッチ

ヘルプおよび情報

SQL Server 2005 の参考資料の入手