【初級編③】SQL Server Management Studio の基本的な操作方法(1/2)

前回はSQLServer 2008 Developer をインストールしましたので、前編・後編と2回に分けて SQLServer の管理ツールである「SQLServer Management Studio」を使ってSQL Server の基本的な操作方法をを説明していきます。

SQLServer Management Studio を起動する

SQLServerにアクセスするためには、「SQLServer Management Studio」(以下「Management Studio」と言います)というツールを使います。SQLServerのデータベースそのものは、人間が直接操作できるような造りになっていないので、Management Studioのような管理ツールを介してデータベースを操作します。

イメージにするとこんな感じです。

DBMS

Windows認証モードでログインする

Management Studio を起動するには、「スタート」メニュー → 「すべてのプログラム」 → 「SQLServer 2008」 → 「SQLServer Management Studio」をクリックします。

Management Studio を起動すると、以下の様なログイン画面が現れます。「サーバー名」のところにコンピュータ名(私のマシンだと”PC01”)を入力し、「接続」クリックします。

ログイン

ログインに成功した場合は次の様な画面になります。

ログイン後の画面

表示される内容の説明は次のとおりです。

No 表示される内容 説明
サーバー名 今回は「規定のインスタンス」としてインストールしたので、ログイン時はサーバー名だけで認識することができる為、ここではサーバー名だけしか表示されません。
もし「名前付きインスタンス」としてインストールした場合は、[サーバー名\インスタンス名]が表示されています。
SQLServer 2008 のバージョン SQLServer 2008 の内部的なバージョン番号(正確にはビルド番号)のことで、サービスパック等を適用することで、バージョン番号は上がっていきます。
なお、一番左の「10」というのはメジャーバージョンを表しており、SQLServer 2008 は「10.0」、SQLServer 2005 は「9.x」、SQLServer 2000 は「8.x」になります。
ログインしたユーザ 今回はwindows認証を使用して「toranomaki」という名前のユーザをSQLServer管理者に登録しており、そのユーザでログインしました。後述しますが、「sa」でログインした場合は「sa」とだけ表示されます。
オブジェクトエクスプローラ このオレンジの枠で囲った部分のことを「オブジェクトエクスプローラ」と言います。

ログインが失敗する場合

Management Studio にログインができない場合は、以下の理由が考えられます。

  1. ログインしようとしているWindowsユーザを、インストール時に管理者として登録していない
  2. インストール時の設定でSQLServerの管理者としてWindowsユーザを登録する際、今操作しているユーザをSQLServer管理者として登録していなかった場合はログインできません。

    インストール時に「Windows認証のみ」を選択してインストールした場合は、インストール時に登録したWindowsユーザにて、再度ログインを試みてください。「混合認証モード」を選択していた場合は、下の方で紹介している「SAでログインする」を試してください。

    ユーザが違う

  3. サーバー名の入力を間違えている
  4. サーバー名(コンピュータ名)を正しく入力してください。インストール時の設定で「規定のインスタンス」ではなく「名前付きインスタンス」を選択してインストールした場合、サーバー名のところは「サーバー名(コンピュータ名)\インスタンス名」を入力するようにしてください。たとえば、コンピュータ名が”PC01”でインスタンス名が”SQL2008″の場合は「PC01\SQL2008」となります。

    サーバ名が違う

  5. SQLServerサービスが起動していない
  6. SQLServerにManagement Studioでログインする為には、SQLServerのプログラム自体が稼働している必要があります。これを、SQLServerのサービスが起動していると表現しますが、このエラーはそのSQLServerのサービスが起動していない状態でログインした際に出るものです。

    サービスが起動していない

    インストール時の設定で「SQLServer Database Engine」の「スタートアップの種類」を[自動]にしていた場合は、SQLServerサービスが自動で起動するのですが、[自動]以外を選択していた場合は、手動で起動してあげる必要があります。

    「スタート」メニュー → 「すべてのプログラム」 → 「SQLServer 2008」 → 「構成ツール」 → 「SQLServer 構成マネージャ」をクリックし、「Sql Server Configuration Manager」を起動します。

    左側の「SQL Server のサービス」をクリックし、右側に表示された「SQLServer(MSSQLSERVER)」の状態が[停止]になっている場合は、サービスが起動していない為、ログインできません。

    サービスが停止している

    この場合は、「SQLServer(MSSQLSERVER)」を右クリックして「開始」を選択すると、サービスが起動します。

    サービスの開始

    サービスが起動しました

    「SQLServer(MSSQLSERVER)」をWクリック、もしくは右クリック「プロパティ」を選択することで表示される画面からも操作が可能です。

    プロパティ

    もし開始モードが「自動」になっていない場合は、このプロパティ画面から変更することができます。「サービス」のタブをクリックし、表示された画面の「開始モード」というドロップダウンから[自動]を選択すれば、次からはWindows起動時に自動的にSQLServerのサービスも起動するようになります。

    開始モードの変更

sa(SQLServer認証モード)でログインする

上の例は「Windows認証」でのログインでしたが、これは今操作しているWindowsにログインしているIDをそのまま使用してログインする(SQLServer側でもWindowsのユーザIDでもって認証する)やり方でしたが、SQLServerインストール時に「混合認証モード」を選択していた場合は、SQLServer専用の管理者ユーザIDを使用してログインすることができます。そのユーザIDが「sa」です。

それでは「sa」でログインしてみましょう。ログイン画面上の「認証」というドロップダウンを[SQLServer 認証]を選択します。すると、「ログイン」に[sa]と表示されますので、「パスワード」にインストール時に指定したパスワードを入力して「接続」をクリックします。

saでログイン

ログインに成功すると、Windows認証の時と比べてログインしたユーザIDの表示だけが変わっていることが確認できます。

saでログイン後

データベースを作成する

SQLServerの構造は、SQLServerの中に複数のデータベースがあり、一つのデータベースの中に複数のテーブルが存在するようになっています。利用者が実際にデータを格納するのはテーブルの中になります。

データベースとテーブルの構造

インストール直後はSQLServerが稼働する為に必要な「システムデータベース」だけが存在していますが、このデータベースは基本的に触ってはいけません。開発者が操作する為に、まずはデータベースを新規作成しましょう。

「データベース」を選択して右クリックし、「新しいデータベース」をクリックします。

データベースの作成

「新しいデータベース」という画面が開くので、「データベース名」を入力します。(ここでは「TestDB」と入力しています)下の方にある「データベースファイル」に表示されているのは、一つはテーブルに格納したデータが保存されるデータファイル(拡張子は .mdf)と、もう一つはデータベースに対する変更履歴が保存されるトランザクションログファイル(拡張子は .ldf)です。データベースの実態はこの2つのファイルで構成されています。

初期サイズはそれぞれ3MBと1MBですが、「自動拡張」の列を見ていただくと分かりますが、サイズが増えてくると自動的にファイルが拡張されるように設定されています。「パス」の列にはこれらのファイルが格納されるパスが表示されており、変更することも可能ですが変更しないでおきましょう。

データベース作成画面

「OK」をクリックすると、データベースが作成されます。オブジェクトエクスプローラより、データベースが追加されていることが確認できます。

追加したデータベース

テーブルを作成する

次は、今作成した「TestDB」にテーブルを作成しましょう。テーブルには以下の表のデータを格納します。

テーブルに格納するデータ

この表はエクセルで作ったのですが、SQLServerではこれがそのままテーブルになります。エクセルの表 = SQLServerのテーブル と思って大丈夫です。それではTestDBの中の「テーブル」を選択して右クリックし、「新しいテーブル」をクリックします。現れた画面ではテーブルの構造である列の情報を、一列 = 一行 のデータとして入力します。エクセル表は6列あった為、このテーブルの構造は6行分入力することになります。

「データ型」は画面のとおり入力し、「NULL を許容」は全てチェックを外しましょう。

テーブル作成画面

入力ができたら「Ctrl + S」で保存しましょう。テーブル名は「Table_Syain」を入力しました。

データ型とは

データ型とは、エクセルでいうところのセルの表示形式みたいなものです。「文字列」「数値」「日付」などを指定します。エクセルと違ってSQLServerの場合は、データ型で指定した型は強制されますので、例えば「数値」型の列に文字列を入力することはできなくなります。

表にするとこんな感じです。

データ型 格納できるデータの種類 備考
int 数値
char 文字列 ()の中に格納可能な最大バイト数を指定する。固定長
varchar 文字列 ()の中に格納可能な最大バイト数を指定する。可変長
date 日付 年月日のみ保持

char は「キャラ」と呼びます(Character の略で”文字”という意味です)。varcharは「バーキャラ」と呼びます(Variable Character の略で”可変長の文字”という意味です)。

char と varchar の違いは?

「char」も「varchar」も文字列を格納するという意味では同じです。後ろの()の中に格納可能な最大バイト数(文字数ではないので注意)を指定します。違いは、「char」は固定長なのでサイズが足りない部分は自動的にスペースが入り、常に最大値のサイズになるが、「varchar」は可変長なので入力された分だけのサイズになり、サイズが足りなくてもスペースで埋まらないということです。

charとvarchar

どう使い分けるか、ですが私はこれまでの経験上charを使用して良かったと思ったことが無く、逆にcharを使用した(設計者がcharを使っていた)せいで不便になることは沢山ありました。余分なスペースが入るので、毎回データを取り出す度に後ろからスペースを取り除く関数を仕込まないといかなかったりとか。。。あまりいい思い出はありません。

ですので、特に理由がなければ「varchar」を使っておいた方が無難です。このサイトでは原則「varchar」を使って解説を進めていきます。

NULL を許容するとは?

NULLとは、「値が存在しないこと」を明示する為のものです。ちなみに文字列の空文字(ブランク)はNULLではありません(空文字という値が存在しているから)。賛否両論あるかと思いますが、どうしてもNULLを使いたい時を除いて、基本は許容しない(チェックを外す)にしておいた方が無難です。

文字列だったら空文字(ブランク)を入れておけばいいですし、数値だったら0を入れておけば初期値だと判断できます。ただ、日付型だけは初期値という定義が難しいので、NULL(未入力)を許容するのもありですね。

作成したテーブルを確認する

作成したテーブルは、オブジェクトエクスプローラに表示されています。テーブル名左の「+」をクリックして中を開き、「列」を展開すると、さきほど定義した列の情報が確認できます。「NULL以外」となっているのは、NULLを許容しないことを表しています。

テーブル確認

テーブルを開いてデータを入力する

それでは、作成したテーブルを開きましょう。作成したテーブルは、オブジェクトエクスプローラに表示されていますので、それを選択しながら右クリックし、「上位200行の編集」をクリックします。

現れた画面では、エクセルの表と同じようにでデータを入力します。さっきは列の数だけ縦にデータを入力しましたが、この画面はエクセルの表と同じく、列は横、行は縦に入力していきます。ちなみに、一番小さい入力エリアのことを、エクセルと同じく「セル」と呼びます。また、一行分のデータのことを「レコード」と呼びます。

テーブルを開く

データ入力の仕方

この画面でデータを入力する際は、いくつか注意が必要になります。

データは一行ずつ確定される

テーブルに格納するデータは、一行単位で変更内容が確定されます。よって、データを変更して列方向に移動しても、それは当該行を入力中であるという状態なのですが、行方向に移動すると、当該行の入力が終了し、編集が確定されます。

編集確定は行単位

入力が終了した場合は、入力内容のチェックが走ります。それは、列の定義で決めたデータ型に沿っているかどうかや、サイズをオーバーしていないかなどです。チェックに引っかかった時は、「行単位のデータ編集に失敗」することになりますので、チェックに引っかかったセルの内容を入力し直し、再度確定させます。

ちなみに、テーブル内でのセルの移動はエクセルと同じく「Enter」キーで一つ下の行へ、「Tab」キーで一つ右の列に移動しますので、漢字の変換をした時にポンポンとエンターを押すと、速攻で行の入力チェックに引っかかることになります。

入力エラー1

データ型に沿っていない

「年齢」は数値型なので入力できるのは数字のみです。また、生年月日が日付型なので日付の形式になっていないとエラーです。

入力エラー2

日付型として認識される為には、以下のような形式で入力をする必要があります。

  • 1993-01-01(1993-1-1 でも可、日だけ省略でき、その場合は1日が自動で入る)
  • 1993/01/01(1993/1/1 でも可、日だけ省略でき、その場合は1日が自動で入る)
  • 1993年1月1日(月と日は省略でき、その場合は1月もしくは1日が自動で入る)
格納できるサイズを超えている

特に文字列で多いのですが、格納できる最大サイズを超えてデータを格納しようとした場合もエラーが出ます。

入力エラー3






エクセルで入力したデータを貼り付ける

エクセルで入力したデータを、表のままSQLServerのテーブルに貼り付けることができます。数値や日付はエクセルの書式を[文字列]にしてデータを入力しておきます。書式が入っていると失敗します。

あとはデータの部分(見出しは除く)を全て選択してコピーし、SQLServerのテーブルで一番下の行を全て選択してから、右クリック「貼り付け」をクリックします。

エクセルからコピー

何故これが可能なのかと言うと、エクセルもSQLServerのテーブル編集画面も、どちらも「TSV(タブ区切り)」だからなんですね。また、これはエクセルに限った話ではなく、SQLServerの同じテーブル内でのレコードのコピーや違うテーブルからレコードのコピーも同じ操作でできます。

テーブルのレコードを削除する

セルの中身をクリアするだけなら、空白にして確定すれば消えたことになります。(厳密には空白に更新しただけですが)入力したデータを消す場合、それは行単位でレコードを削除することになります。

レコードを削除するには、テーブルの各行の行ヘッダをクリックし、行全体を選択してから「Delete」キーをクリックするか、行全体を選択した状態で右クリックし、「削除」をクリックします。一番左上のセルをクリックして全レコードを選択して削除すると、全レコードを一度に削除できます。

レコードの削除

テーブルを参照モードで開く

これまではずっとテーブルを「編集モード」で開いていましたが、「参照モード」で開くこともできます。「オブジェクトエクスプローラ」で当該テーブルを選択しながら右クリックし、表示されたメニューの「上位1000行の選択」をクリックします。

すると、右側にテーブルの中身が表示されます。上側は、「クエリエディタ」と言って、SQLを記述するエリアになります。下側にテーブルのレコードが表示されていますが、要するにクエリエディタで記述したSQLを実行した結果を下に表示していることになります。

テーブルを表示

この実行結果(レコードが表示されている箇所)からは、普通にエクセルにコピペができます。

エクセルにコピペ可能

1000件しか開けないの?

テーブルを選択して右クリックした時は「上位1000件の選択」と「上位200件の編集」と表示されますが、この数字は変更することが可能です。変更するには、画面上部の「ツール」メニューから「オプション」をクリックします。表示された画面から「SQL Server オブジェクト エクスプローラ」をクリックします。

そうすると、右側に「テーブルおよびビューのオプション」として、「上位
行の選択コマンドの値」と「上位
行の編集コマンドの値」がありますので、ここで入力した値が、右クリックした時の数字になります。値を0にすると無制限になりますので、0にしておきましょう。 上位n行

テーブルの列の構造を変更する

上の方では新規にテーブルを作成しましたが、既に存在しているテーブルの列の構造を後から変更することも勿論できます。ただ、SQLServer 2008からはテーブルの列の構造を変更した時に、デフォルトでは何故かエラーが出るようになりました。

エラーを出ないようにする為には、「ツール」⇒「オプション」を開き、「Designer」をクリックすると右側に表示される内容から、「テーブルの再作成を必要とする変更を保存できないようにする」のチェックを外します。こうすると、列の構造を変更しても保存することができるようになります。

スキーマ変更できるようにする

チェックを外したら、オブジェクトエクスプローラからテーブルを選択した状態で右クリックし、「デザイン」をクリックします。右側にテーブルの列の構造を変更できる画面が表示されますので、列名の変更やサイズ、型の変更などが行えます。入力が終わったら「Ctrl + S」で保存しておきます。

列の構造を変更する

以上、SQLServer Management Studio の基本的な使い方でした。

この記事と関連性の高い記事