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


363

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



29
@ChrisF-これは重複ではありませんが、受け入れられた回答もこの質問に回答します。その質問は、トランザクションで「GO」を使用することに関するものです。それは、実際にはSQLコマンドではないことがわかります。この質問はより一般的であり、SSMSのGOコマンドに関する質問に決定的な答えを提供しようとします。
tvanfosson 2010

3
また、このリンクを見てください:バッチ処理ステートメントは何に適していますか?
Zain Rizvi

Microsoftのドキュメント:SQL Serverユーティリティステートメント-GOGOの前のバッチは、指定された回数実行されます。

回答:


304

バッチターミネーターですが、好きなように変更できます 代替テキスト


80
gbnはそれをSELECTにして何が起こるかを調べます:-)
SQLMenace

14
ありがとう!しかし、GOステートメントのポイントは何ですか?これは愚かに聞こえるかもしれませんが、「コードのバッチ」とはどういう意味ですか?msdnは、GOの後、変数の寿命が切れると言います。トランザクションのコミットメントとは関係ありませんか?スクリプトにGOステートメントを保持する必要がある状況はありますか?
kate1138 2014年

4
これは、それより前のすべてのT-SQLが「一度に」実行されることを意味します。私の理解では、セミコロン(OLEDB / Oracle)と交換可能です。たとえば、展開後のスクリプトが大きい場合、行間のGOステートメントは、スクリプトで使用されるメモリに役立ちます。
Anthony Mason

4
この答えは、「実際に何が行われるのか」または理由を実際には説明していません
Andrew

@tvanfossonの回答を読んだ後:セミコロンと本当に交換可能ですか?
WoIIe

299

Management Studioの2005年以来、あなたが使用できるようだGOint同じように、パラメータ:

INSERT INTO mytable DEFAULT VALUES
GO 10

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


199

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

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

詳細については、http://msdn.microsoft.com/en-us/library/ms188037.aspxを参照してください


37
GO実際に役立つバッチ処理はどのような状況で使用できますか?
nicodemus13 2013年


4
バッチ内の1つのステートメントが失敗した場合、すべて失敗しますか?
MonsterMMORPG 2016年

36

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

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

数回前に回答... 例1


4
私の弁護では、質問を送信する前に、提案された重複を調べました-答えは当てはまりますが、あなたの例は表示されず、実際には重複もありません。
tvanfosson 2010

26
ここで「GO」を検索するのは難しい:-)
gbn

20

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

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

手順も作成
Luciano Santos

2
これは、OPの質問の最初の部分に実際に対処する唯一の回答です。「...常にGOコマンドを挿入します...なぜですか?」ほとんどの場合、それは恐怖からのようです。必要なのは、コマンドを独自のバッチに含める必要がある場合のみです。
bielawski

7

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

Select * from employees;
GO    -- GO 1

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

上記の例では、GO 1の前のステートメントはバッチでsqlサーバーに移動し、GO 2の前の他のステートメントは別のバッチでsqlサーバーに移動します。ご覧のとおり、バッチが分かれています。


5
Use herDatabase
GO ; 

コードは、GOマーカーの上にある命令を実行するように言っています。私のデフォルトのデータベースはmyDatabaseなので、myDatabase GOherDatabaseを使用するために現在のクエリを使用して作成する代わりに


-8

これがGOの魔法です。

SELECT 'Go'
Go 10

構文: INTに行く(BatchNumber)

BatchNumber:発生回数

シンプルに見えますが、より深くコーディングすると、スパゲッティにつながる可能性があります。


これは、バッチスクリプトのように、プログラミングで使用されているGOTOステートメントを説明しようとしています。通常、GOはINTでは使用されませんが、バッチをN回処理したい場合は使用できます。そのため、それはGOの「魔法」ではありません。他の回答で説明されているように、スクリプトを一連のグループ化された実行に分離するために使用されます。
Heriberto Lugo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.