次の方法で共有


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 つのバッチを作成します。最初のバッチは、データベース コンテキストを設定する USEAdventureWorks ステートメントのみで構成されます。その他のステートメントではローカル変数が使用されます。このため、すべてのローカル変数宣言を 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

関連項目

概念