ITエンジニアの成長ブログ

ITエンジニアとして行う勉強の発信&日々の生活で体験した楽しいことをゆるく発信

SQL Serverのバッチについて

SQL Serverのバッチについて調べたことをまとめておこうと思います。

SQL Serverのバッチとは?

SQL Serverのバッチとは、SQL Serverに対してまとめて処理させたいステートメントの塊のことです。バッチの中に複数のステートメントを入れて、その複数のステートメントをグループ化することができます。
これだけでは、意味が分かりませんよね。。まずはわかりやすい例として、ローカル変数の定義で確認してみます。

Transact-SQLのローカル変数は、この「バッチ」という範囲内でのみ有効になります。実際にSSMSを使って、それを確認してみましょう。

SSMSでは、このクエリエディターに記述したすべてのステートメントが1つのバッチとして扱われます。以下では、ローカル変数を定義しそれを検索するという特になんでもない処理です。ローカル変数の値を正しく参照して、検索することができています。

f:id:mr_star:20210917195304p:plain
ローカル変数のバッチの範囲の説明

それでは、SELECT文のみを選択して実行してみましょう。変数を定義してくださいというエラーになりました。実はこのように、SSMSのクエリエディターで選択した状態で実行すると、その選択した部分がバッチとして扱われます。

選択した部分にはローカル変数の定義がないため、エラーになったということです。

f:id:mr_star:20210917195633p:plain
ローカル変数のバッチの範囲の説明②

また、このバッチを区切るための構文として「GO」があります。
SQL Server のユーティリティのステートメント - GO - SQL Server | Microsoft Docs

これは、バッチを区切る効果があります。さきほどのクエリで、ローカル変数の定義とSELECT文の間に「GO」を入れて実行してみましょう。

f:id:mr_star:20210917200018p:plain
ローカル変数のバッチの範囲の説明③

SELECT文がエラーになりました。ローカル変数定義とSELECT文がGOで区切られているので、それぞれバッチの範囲が分かれているため、ローカル変数が参照できずエラーとなったということです。

バッチの先頭に記述する必要があるステートメント

簡単にバッチについて確認してきました。補足として、実はバッチの先頭に記述しないとエラーになるステートメントがいくつかあります。これは知らなかったので、やや驚きました。いくつか紹介します。

  • CREATE PROCEDURE
  • CREATE VIEW
  • CREATE FUNCTION
  • CREATE TRIGGER

CREATE VIEWで実際にエラーになるか確認してみましょう。SELECT文がバッチの先頭にあるので、以下のとおりエラーになりました。

f:id:mr_star:20210917200641p:plain
CREATE VIEWでエラー

先頭のSELECT文をコメントアウトして、再度実行すると成功しました。

f:id:mr_star:20210917200806p:plain
CREATE VIEWで正常終了

補足

ちなみに、補足としてこのバッチ「GO」という識別子は変更することができます。SSMSで変更するには、「ツール」-「オプション」を選択します。オプションの「クエリ実行」を選択すると、設定欄の中にバッチ区切り記号があります。現在は、「GO」になっていますがここを任意の値にすることでバッチ区切り文字が変更できます。

まあ、まず変更することはないと思いますが。。。

f:id:mr_star:20210917202242p:plain
バッチ区切り文字の変更

おわりに

いかがでしたでしょうか。ときどき参考書やSQL Server関連のWebページでさらっと言葉として出てくるバッチを簡単に紹介しました。
知らなくても問題ないかもしれませんが、色々と細かいところで出てくるので知っておいたほうが良さそうですね。

最後までお読みいただきありがとうございました。今回はこの辺で失礼いたします。