とりあえず半歩

学んだことを1日1個、簡単なことでも良いから記録していきたい。

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だと必須じゃないっていうの嫌らしい気もしている。

「ここでこの文は終わり」と明示できるので、個人的には使っていこうと思う。

参考