GOとセミコロンってなんだろうか
課題
何となく使っていたGOと;(セミコロン)って一体なんだろうと思ったので調べることとした。
実行
GO
言語ではない。ゴメンね。
T-SQLだとバッチ終了のコマンドとのこと。
バッチというのは次のようなものらしい。
バッチとは、SQL Server で実行するためにアプリケーションから同時に送信する 1 つ以上の Transact-SQL ステートメントをグループにしたものです。
自分は「複数のクエリやコマンドをまとめて意味をもたせたもの」という認識でいる。 クエリAとクエリBがあったとして、AとBは別々にしておくよりも、まとまった処理って考えたほうがわかりやすいよね、っていう単位がバッチだと受け取った。
そして、そのバッチの終了コマンドはGOとのこと。 つまり「このSELECT文を流したらこの処理は終わり」とか「このDBを使うよう宣言したらとりあえず1処理終了」とか、そういうことのようだ。
あと、ローカル変数はバッチ内でしか有効でない。ローカル変数のスコープが宣言してからバッチの終わりまでとのことだ。
DECLARE @test varchar(10) SET @test = 'hogehoge' SELECT @test GO SELECT @test
上記のコードだと、2つ目のSELECT文で@test変数が見つからなくてエラーになる。
もう1つ、GOコマンドはsqlcmdとosql、Management Studioでしか有効でない。例えば、C#のSqlDataAdapterを使ってクエリを発行した時、このGOは認識されない。
;(セミコロン)
Transact-SQL ステートメントのターミネータを示します。セミコロンは、このバージョンの SQL Server のほとんどのステートメントでは必須ではありませんが、将来のバージョンでは必須となる予定です。
とあった。つまり、日本語の句点かな。2008 R2だと必須じゃないっていうの嫌らしい気もしている。
「ここでこの文は終わり」と明示できるので、個人的には使っていこうと思う。