1. ホーム
  2. tsql

[解決済み] バッチ」とは何か、なぜ「GO」が使われるのか?

2022-07-01 14:50:07

質問

MSDNなどを読みあさりました。 OK、それでバッチの終了を知らせるのですね。

バッチを定義するものは何ですか? 同時に実行されるスクリプトの束を貼り付けるときに、なぜ行く必要があるのかわかりません。

私は GO を理解したことがありません。 誰かこれをもっとよく説明して、いつ使う必要があるのか(何回、どんな種類のトランザクションの後に)わかりますか?

例えば、なぜ私はここで各更新後にGOを必要とするのでしょうか。

 UPDATE [Country]
   SET [CountryCode] = 'IL'
 WHERE code = 'IL'

 GO

 UPDATE [Country]
   SET [CountryCode] = 'PT'
 WHERE code = 'PT'

どのように解決するのですか?

GO ではない を適切にTSQLコマンドに変換します。

その代わりに、それは特定の クライアントプログラム クライアントプログラムに、"go" までに入力された一連のコマンドを実行するためにサーバーに送信する必要があることを通知します。

なぜ/いつそれが必要なのですか?

  • MS SQL サーバーの GO には "count" パラメータがあり、これを "repeat N times" ショートカットとして使用することができます。

  • 非常に大きな更新は、SQL サーバーのログをいっぱいにする可能性があります。それを避けるために、更新をより小さなバッチに分離する必要があるかもしれません。 go .

    あなたの例では、もし国コードのセットに対する更新がログスペースを使い果たすほどのボリュームがある場合、解決策はそれぞれの国コードを別々のトランザクションに分離することです - これはクライアント上で go .

  • いくつかの SQL 文は、動作させるために次の文と GO で区切らなければなりません(MUST)。

    例えば、少なくともSybaseでは、1つのトランザクションでテーブルを削除し、同じ名前のテーブルを再作成することはできません(プロシージャ/トリガの作成も同様です)。

> drop table tempdb.guest.x1          
> create table tempdb.guest.x1 (a int)
> go
  Msg 2714, Level 16, State 1
  Server 'SYBDEV', Line 2
  There is already an object named 'x1' in the database.   
  
> drop table tempdb.guest.x1          
> go
> create table tempdb.guest.x1 (a int)
> go
>