第 2 章 「クエリアナライザ」 ~ 初めて学ぶ Transact-SQL ~

NEC

Eラーニング事業部

鈴木 智行

2003 年 2 月 3 日

On This Page

1. Transact-SQL を発行する 2 つのツール 1. Transact-SQL を発行する 2 つのツール
2. クエリアナライザの基本機能 2. クエリアナライザの基本機能
     2-1 色分け
     2-2 部分的な実行
3. バッチとスクリプト3. バッチとスクリプト
     3-1 バッチ
     3-2 スクリプト
4. オブジェクトブラウザ4. オブジェクトブラウザ
5. テンプレート5. テンプレート

1. Transact-SQL を発行する 2 つのツール

日頃皆さんが SQL Server 2000 にアクセスする場合は、ACCESS や Visual Basic で作成したアプリケーションや管理ツール (SQL Server Enterprise Manager 等) などを用い、GUI 操作を通して扱う場合がほとんどだと思います。しかしそういったアプリケーションや管理ツールを使用している場合でも SQL Server 2000 に対しては Transact-SQL が自動生成されて、処理が行われています (図 1-1)。

図

1-1 SQL Server 2000 には Transact-SQL でアクセスする

では Transact-SQL を直接 SQL Server 2000 に対して発行するためにはどうしたらいいのでしょうか。それを実現するためには以下の 2 つのツールのいずれかを使用します。2 つのツールはどちらも SQL Server 2000 に Transact-SQL を発行するためのインタフェースを提供します。

  • クエリアナライザ

  • osql ユーティリティ

    一般的にデータベースに問い合わせることをクエリといいます。クエリアナライザは Windows 環境で動作するツールで、私達は Transact-SQL を直接入力し、GUI 操作を通して実行結果を受け取ることができます。このような基本機能だけでなく他にも様々な機能を持っていますが、クエリアナライザに関しては [2.クエリアナライザの基本機能] 以降でご紹介します。

    osql ユーティリティはコマンドベースのツールで、私達は Transact-SQL を対話的に直接入力し、結果を画面で受け取ることができます。osql ユーティリティにはたくさんのオプション (大文字、小文字を区別) がありますが、代表的なオプションを表 1-2 に示します。詳細なオプションについては Books Online を参照してください。

オプション

説明

-S servername

ログインするサーバー (接続先 SQL Server) の指定 (名前付きインスタンスの場合はservername\instancenameになり、ローカルサーバーであれば省略可)

-U login_id

SQL 認証ログインの指定

-P password

パスワードの指定 (-U と併用)

-E

Windows 認証ログインの使用を宣言

-i input_file

Transact-SQL が記述されたファイルを指定

-o output_file

結果を受け取る出力ファイルを指定

1-2 osql ユーティリティの代表的なオプション

では osql ユーティリティの使い方を簡単にみていきましょう。[スタート] - [プログラム] - [アクセサリ] - [コマンドプロンプト] でコマンドプロンプトを起動します。Administrators グループに所属するユーザーで Windows にログオンしていれば、-E オプションを使用して簡単に SQL Server 2000 に接続することができます。今回はその条件で osql ユーティリティを使います (画面 1-3)。

画面

画面 1-3 osql ユーティリティでの接続と Transact-SQL ステートメントの入力

画面 1-3 のように osql -E で SQL Server に接続した後はステートメント単位で osql ユーティリティに対し入力します。osql ユーティリティからは行を表すプロンプトが返されます。全てのステートメントを入力した後は SQL Server 2000 に Transact-SQL を送信します。そのためには go ステートメントを使用します (画面 1-4)。

画面

画面 1-4 go ステートメントで Transact-SQL を送信

特に指定がなければ、結果は画面で受け取ります。

また -i オプションを使用すれば、テキストファイル (今回は c:\商品select.sql) に Transact-SQL を記述しておき、そのファイルを入力として Transact-SQL を実行し(画面 1-5)、結果を -o オプションを使用してテキストファイルに出力することも可能です。

画面

画面 1-5 -i オプションで osql ユーティリティを実行した例

2. クエリアナライザの基本機能

クエリアナライザは [スタート] - [プログラム] - [Microsoft SQL Server] - [クエリアナライザ] で起動します。まずは 1 の osql ユーティリティを使ったケースと同じ条件で SQL Server に接続します (画面 2-0-1)。

画面

画面 2-0-1 Windows 認証でローカル SQL Server に接続

するとウィンドウが開くので、フリーフォームで Transact-SQL 文を入力します (画面2-0-2)。

画面

画面 2-0-2 フリーフォームで Transact-SQL 文を入力

全てのステートメントを入力した後は SQL Server 2000 に Transact-SQL を送信します。そのためには [クエリ] - [実行] あるいは [クエリ実行] アイコンを押下します。

画面

画面 2-0-3 [ クエリ実行 ] Transact-SQL を送信

クエリ結果は画面 2-0-3 のようにウィンドウの下半分に返ってきますが、[クエリ] - [結果をテキストで表示] を押下しておけば、画面 2-0-4 のようにテキスト形式で返ってきます。画面 2-0-3 の結果はグリッド形式と呼び、出力結果を列単位で操作できます。

画面

画面 2-0-4 テキスト形式で結果を表示

2-1 色分け

Transact-SQL に文法の間違いやスペルミスがある場合には、もちろんエラーになります。そのため効率よくプログラム開発を行う場合にはこのようなケアレスミスを少なくしなければいけません。この手助けをするためにクエリアナライザでは SQL Server で用途が決まっているキーワード (select,insert,delete,update...) やその他の言語要素を自動的に色分けして表示を行ない、視覚に訴えることが可能です。既定では前景色が割り当てられていますが、これを変更したり後景色を割り当てることが可能です。このようなカスタマイズはクエリアナライザにおいて [ツール] - [オプション] の [フォント] タブで設定します(画面 2-1-1)。

画面

画面 2-1-1 色分けの設定

2-2 部分的な実行

クエリアナライザでは Transact-SQL を 1 ステートメントごとに実行する必要はありません。例えば select ステートメントを 2 つ記述し実行すれば、それぞれのステートメントに対する結果がまとめて返ってきます (画面 2-2-1)。

画面

画面 2-2-1 複数のステートメントは同時に実行可能

しかしプログラミング開発時など 1 ステートメント毎に確認をしたいケースなどがあるでしょう。その場合には実行したい Transact-SQL だけをカーソルで反転させた状態で実行します (画面 2-2-2)。すると選択された部分だけ結果を返すことが可能になります。

画面

画面 2-2-2 カーソルを反転させて実行

3. バッチとスクリプト

クエリアナライザではバッチとスクリプトの概念を理解する必要があります。

3-1 バッチ

[2-2 部分的な実行] で紹介したとおり、SQL Server には Transact-SQL ステートメントをまとめて発行することができます。しかし発行された全てのステートメントがまとめて処理されるわけではなく、バッチという単位でコンパイルされて実行されます。このバッチという単位は私たちが go ステートメントを記述することによって決定することが可能です。しかしここで重要なのは Transact-SQL ステートメントの中には他のステートメントと同一バッチとして記述できないものがあるということです (表 3-1-1)。

ステートメント

説明

CREATE FUNCTION

ユーザー定義関数を作成する

CREATE PROCEDURE

ストアドプロシージャを作成する

CREATE TRIGGER

トリガを作成する

CREATE VIEW

ビューを作成する

3-1-1 他のステートメントと同一バッチにできない Transact-SQL ステートメント

もし表 3-1-1 のステートメントを他のステートメントと同じバッチとして実行した場合には画面 3-1-2 のようなエラーが返ってきます。

画面

画面 3-1-2 異なるバッチとして実行しないことによるエラー

その場合には適切な位置に go ステートメントを挿入し Transact-SQL を実行してください (画面 3-1-3)

画面

画面 3-1-3 go ステートメントを適切な位置に挿入

3-2 スクリプト

クエリアナライザで実行した Transact-SQL は 1 回限りのものではなく、繰り返し実行したり多少カスタマイズして実行したいケースがあると思います。その場合クエリアナライザでは、Transact-SQL を再利用するためにファイルに保存することが可能です。この保存する単位のことをスクリプトと呼び、既定で拡張子は.sql を使用します。保存方法はクエリアナライザの [ファイル] - [名前を付けて保存] で適切なフォルダに適切な名前を指定します (画面 3-2-1)。

画面

画面 3-2-1 クエリアナライザからスクリプトファイルとして保存

再利用する場合にはクエリアナライザの [ファイル] - [開く] で適切なフォルダを選択し、スクリプトファイルを選びます (画面 3-2-2)。するとアクティブなウィンドウに Transact-SQL を読み込むことができます。

画面

画面 3-2-2 スクリプトファイルの読み込み

4. オブジェクトブラウザ

クエリアナライザでは直接 Transact-SQL を入力しますが、クエリアナライザに添付されているオブジェクトブラウザを使用すれば、Transact-SQL の入力作業を軽減することができます。オブジェクトブラウザは通常クエリアナライザの左側に表示されていますが (画面 4-1)、[ツール] - [オブジェクトブラウザ] - [表示/非表示] で表示/非表示を切り替えることが可能です。

画面

画面 4-1 オブジェクトブラウザ

例えばオブジェクトブラウザで [販売(データベース)] - [ユーザーテーブル] - [dbo.商品] を選択し、右クリックしたメニューから [開く] を選択すると商品テーブルの全件データを取得することができます。

画面

画面 4-2 オブジェクトブラウザの [ 開く ] メニューの結果

これはまさしく

use 販売 select * from 商品

を入力して実行した結果と同じであることがわかります。

また全件データを必要としない場合には、同じように商品テーブルを右クリックしたメニューから [新規ウィンドウにオブジェクトのスクリプトを作成] - [select] を選択することで画面 4-3 のような商品テーブルのデータを取得する select ステートメントを自動生成してくれます。

画面

画面 4-3 商品テーブルのデータを取得する select ステートメントを自動生成

この select ステートメントの列リストから取得しない列を削除したり、where 句を追加して条件を指定すれば、必要なデータのみを取得することもできます。

このように Transact-SQL ステートメントを一から入力しなくても、オブジェクトブラウザの助けを借りて効率よく Transact-SQL ステートメントを構築することができるのです。

5. テンプレート

オブジェクトブラウザではデータベースやデータベースオブジェクトを作成するときの Transact-SQL ステートメント (データ定義言語) にテンプレートを使用することができます。今回のコラムではデータ定義言語についての細かいステートメント内容や構文は紹介しませんが、テンプレートの使い方は非常に重要なのでぜひ覚えてください。 テンプレートは画面 4-1 のオブジェクトブラウザから [テンプレート] タブを選択します(画面5-1)。

画面

画面 5-1 SQL Server で用意されているテンプレート

実際のテンプレートは C:\Program Files\Microsoft SQL Server (デフォルトのインストール先)\80\Tools\Templates\SQL Query Analyzer の中に.tpl の拡張子をもつファイルとして格納されています。

ここではテンプレートを使用してデータベースを作成してみましょう。画面 5-1 のテンプレートから [Create Database] - [Create Database Basic Template] を選択し、右クリックしたメニューから [開く] を選択すると、基本的なデータベースを作成するテンプレートをクエリアナライザに読み込むことができます(画面 5-2)。

画面

画面 5-2 基本的なデータベースを作成するテンプレート

このテンプレートは流用できるようにテンプレートパラメータ (<パラメータ名、種類、値>) を使用して構成されています。もちろんこれでは不完全なので、テンプレートパラメータの部分は適切な名前、値に置き換えなければいけません。しかしテンプレートパラメータの数が多ければ多いほど置き換えの作業は大変面倒になります。ここで有効なのが[テンプレートパラメータの置換]です。クエリアナライザの [編集] - [テンプレートパラメータの置換] を選択すると、画面 5-3 のようなテンプレートパラメータを置き換えるためのウィンドウが表示されます。

画面

画面 5-3 テンプレートパラメータの置換ウィンドウ   (基本的なデータベース作成)

今回は基本的なデータベースの作成テンプレートなのでパラメータは 1 つしかありませんが、複数のテンプレートパラメータがある場合にはここに全てのパラメータが一覧表示されます。今回はdatabase_nameパラメータ (データベース名にあたる) に対する値として'配送'という文字列を入力して [すべて置換] ボタンを押下します。するとテンプレートパラメータの部分が指定した値に置き換えられ、簡単な手続きでエラーのない Transact-SQL を実行することが可能になります (画面 5-4)。

画面

画面 5-4 テンプレートパラメータの置換後の Transact-SQL

次回以降は SELECT ステートメントを中心にご紹介します。

dts.jpg

鈴木 智行: NEC Eラーニング事業部に所属。入社以来、インストラクタとして教育業務に従事。汎用機、UNIX を経て、1994 年より マイクロソフト認定トレーナー (MCT) として、管理者向け教育を担当。SQL Server は 4.21a から携わっており、現在は主に SQL Server 2000 に関わるデータベース教育を中心に担当。 Windows 2000 および SQL Server 2000 での MCSE,MCDBA を取得しており、情報処理技術者試験のテクニカルエンジニア(データベース)も取得済。 SQL Server の優位性をアピールできるように Oracle Gold も取得した。今後 Oracle Plutinum を取得予定し、日々データベースを極めることに努力している。