右クリックして[名前を付けてスクリプト]メニューを使用してクエリを作成すると、SQL Server Management Studioで常にGOコマンドが挿入されます。どうして? GOは実際に何をしますか?
それはバッチターミネータです、しかしあなたはそれをあなたが望むものに変更することができます
Management Studio 2005以降、次のようにGO
をint
パラメータと共に使用できるようになりました。
INSERT INTO mytable DEFAULT VALUES
GO 10
上記はmytable
に10行挿入します。一般的に言って、GO
は関連するSQLコマンドをn
回実行します。
GOコマンドはTransact-SQLステートメントではなく、SQL Server Management Studioコードエディタを含むいくつかのMSユーティリティによって認識される特別なコマンドです。
GOコマンドは、SQLコマンドをまとめてサーバーに送信されるバッチにグループ化するために使用されます。バッチに含まれるコマンド、つまり最後のGOコマンドまたはセッションの開始以降のコマンドのセットは、論理的に一貫している必要があります。たとえば、変数を1つのバッチで定義してから別のバッチで使用することはできません。変数の有効範囲は、その変数が定義されているバッチに限定されるためです。
詳細については、 http://msdn.Microsoft.com/ja-jp/library/ms188037.aspx を参照してください。
既存の回答に追加するには、ビューを作成するときに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
Use herDatabase
GO ;
コードはGO
マーカーの上の命令を実行するように指示します。私のデフォルトのデータベースはmyDatabaseなので、myDatabase GO
を使う代わりに現在のクエリでherDatabaseを使う
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に行きます。それで私達が見るようにそれはバッチを分けた。