トップページへ PASSJ ブログへ
トップページへ
分科会
特集!
コミュニケーション
資格
セミナー・コンファレンス
インフォメーション
開発者必見! 覚えておきたいSQL Serverの便利機能
文=株式会社システムインテグレータ 堀 真人
第5回
エラーをやっつけろ!
SQL Serverには、強力な開発ツールと充実したヘルプファイルがついています。それだけで、他のRDBMS製品よりも開発環境で一歩リードしているといえるでしょう。そこで、これらの環境をうまく使いこなすためのエラー処理の初級ノウハウをお教えしましょう。
Tips 1

ミスを減らすための工夫は文字フォントに!


まずは、ミスを減らす工夫が必要です。SQLクエリアナライザを標準で立ち上げた状態では、SQLで多用されるカンマ(,)やピリオド(.)がなかなか見づらいと思います。これは、クエリアナライザの標準フォントが「MSPゴシック」になっているからです。そこで、表示フォントを標準の「MSPゴシック」から「MSゴシック」に変更します。この操作で、標準では見えにくかった「カンマ」と「ピリオド」が見えるようになり、ミスも減るでしょう。

■ MSPゴシック(左)とMSゴシック(右)の表示の違い
(図)MSPゴシック(左)とMSゴシック(右)の表示の違い


Tips 2

エラーはBooks Onlineで探す!


SQL Serverのクエリ実行時のエラーメッセージは、通常このような形で出てきます。SQL Serverのクエリ実行時のエラーメッセージは、通常このような形で出てきます。

サーバー : メッセージ 156、レベル 15、状態 1、行 5
キーワード 'FROM' 付近に正しくない構文があります。

この中で重要なのが、キーワード。エラーメッセージそのものですから、これでわかるエラーなら、すぐに原因は察しがつくでしょう。この場合は、SQLよくあるSQL構文エラーです。メッセージを読んでわからなかった場合は、メッセージ番号「156」が役立ちます。F1キーを押してSQL Server Books Onlineを開き、「156」と打ち込んで検索すると、エラーメッセージ156の説明が出てきます。

BooksOnlineのエラーの説明は、基本的にはエラー番号ごとのリストになりますが、重要なエラーやよく起こるエラーに関しては、解説ページを設けてあるようです。「156」も頻発するエラーなので解説ページがあります。

「レベル 」はエラーの重要度を表し、「状態」はSQL Serverの内部コードのエラー位置を示すもので、主にMicrosoftのサポート用に用意されているようです。開発者は気にする必要はないでしょう。最後の項目、「行」は重要です。エラーの場所がつかみにくいときは、SQLを縦に細かく区切ってみると、エラーの位置がかなり明確になります。ただし、行番号の特定できない構造的なエラーもありますから注意しましょう。上に示した「'FROM' 付近に正しくない構文があります。」も、エラーの位置が正確に出るのではなく、FROM句の行がエラーとして示されます。

■ SQL Server Books Onlineのエラーメッセージ解説
(図)SQL Server Books Onlineのエラーメッセージ解説


Tips 3

このエラーに注意!


「エラーメッセージの意味がわからない、何が原因かわからない」。開発者ならそんな経験ありますよね? SQL Serverのエラーメッセージはかなりストレートな言葉になっていますから、日常的にはそういった煩わしさは感じないでしょう。その中でも、いくつか気をつけてほしいエラーがあります。

・「STRING または BINARY データは切り詰められました。」

単純なケタあふれのエラーです。5バイトの列に7文字を入れようとしたときなどに発生します。エラーを起こさないためには、もちろん決められたバイト数でセットする必要があります。

・「varchar 値 'aa' から int データ型に変換できませんでした。」

WHERE句に「'AAA'=1」なんて条件を書いてしまった場合に起こります。文字列であるAAAを無理やり数値に変換しようとしてエラーになっているわけです。直接的にこういう条件を書く人はいないでしょうが、システムの運用中に動的に生成されるSQLの中では、こうした事態も起こります。文字と数値が比較されるような設計にしないことがまずは大事ですが、改修、統合などが重なったり、設計慣れしていない場合などは、必ずしもベストのDB構造にならないことがほとんどでしょう。ある状態では動く('9'=1なら数値同士で比較される)けれど、ある状態ではエラーになる('A'=1になるとエラー)という、やっかいなものです。

■ 文字列を数値に変更しようとしてエラーが発生
(図)文字列を数値に変更しようとしてエラーが発生



・ 第1回 SQL クエリアナライザのクエリ実行機能
・ 第2回 SQL クエリアナライザ Part 2
・ 第3回 開発者のための、日常的バックアップの小ワザ
・ 第4回 SQL Server 転ばぬ先の杖!
・ 第5回 エラーをやっつけろ!
・ 第6回 SQL構文の違いを押さえる!
・ 第7回 Transact-SQLをマスターしよう!
・ 第8回 パフォーマンス監視ノウハウ


著者プロフィール
株式会社システムインテグレータ
堀 真人(HORI, Masato)

http://www.sint.co.jp/

新横浜で2年半Oracleを使い、埼玉に飛んでからはSQLServerと戦う毎日を送る“DBバイリンガル”な27歳。
ITとは、「アイデアを支えるテクノロジー」と心得る。
趣味はレゲエとSQL Server。愛読書はレゲエ専門誌「Riddim」とデータベース専門誌「DBマガジン」。

← 特集!DBバイリンガル 目次

PASSJメールニュース 著作権ついて プライバシーポリシー リンクポリシー お問い合わせ
(C) 2005 Professional Association for SQL Server Japan. All rights reserved.