web-dev-qa-db-ja.com

SQL Server Management StudioおよびTransact SQLでのGOの使用は何ですか?

右クリックして[名前を付けてスクリプト]メニューを使用してクエリを作成すると、SQL Server Management Studioで常にGOコマンドが挿入されます。どうして? GOは実際に何をしますか?

319
tvanfosson

それはバッチターミネータです、しかしあなたはそれをあなたが望むものに変更することができます alt text

279
SQLMenace

Management Studio 2005以降、次のようにGOintパラメータと共に使用できるようになりました。

INSERT INTO mytable DEFAULT VALUES
GO 10

上記はmytableに10行挿入します。一般的に言って、GOは関連するSQLコマンドをn回実行します。

269
MicSim

GOコマンドはTransact-SQLステートメントではなく、SQL Server Management Studioコードエディタを含むいくつかのMSユーティリティによって認識される特別なコマンドです。

GOコマンドは、SQLコマンドをまとめてサーバーに送信されるバッチにグループ化するために使用されます。バッチに含まれるコマンド、つまり最後のGOコマンドまたはセッションの開始以降のコマンドのセットは、論理的に一貫している必要があります。たとえば、変数を1つのバッチで定義してから別のバッチで使用することはできません。変数の有効範囲は、その変数が定義されているバッチに限定されるためです。

詳細については、 http://msdn.Microsoft.com/ja-jp/library/ms188037.aspx を参照してください。

177
tvanfosson

GOはSQLキーワードではありません。

これは、スクリプト全体をバッチに分割するためにクライアントツール(SSMSなど)で使用されるバッチセパレータです。

数回前に回答しました… 例1

31
gbn

既存の回答に追加するには、ビューを作成するときにgoを使用してこれらのコマンドをバッチに分割する必要があります。そうしないと、エラー'CREATE VIEW' must be the only statement in the batchが発生します。したがって、たとえば、goがないと、次のSQLスクリプトを実行することはできません。

create view MyView1 as
select Id,Name from table1
go
create view MyView2 as
select Id,Name from table1
go

select * from MyView1
select * from MyView2
13
Use herDatabase
GO ; 

コードはGOマーカーの上の命令を実行するように指示します。私のデフォルトのデータベースはmyDatabaseなので、myDatabase GOを使う代わりに現在のクエリでherDatabaseを使う

6
TonyP

Goは、その前後およびそれ以前のGOの後に書かれたSQLステートメントがSQLサーバーに送られて処理されることを意味します。

Select * from employees;
GO    -- GO 1

update employees set empID=21 where empCode=123;
GO    -- GO 2

上記の例では、GO 1より前のステートメントはバッチでSQL Serverに行き、その後GO 2より前の他のステートメントは別のバッチでSQL Serverに行きます。それで私達が見るようにそれはバッチを分けた。

4
ANIL KUMAR