まずは、ミスを減らす工夫が必要です。SQLクエリアナライザを標準で立ち上げた状態では、SQLで多用されるカンマ(,)やピリオド(.)がなかなか見づらいと思います。これは、クエリアナライザの標準フォントが「MSPゴシック」になっているからです。そこで、表示フォントを標準の「MSPゴシック」から「MSゴシック」に変更します。この操作で、標準では見えにくかった「カンマ」と「ピリオド」が見えるようになり、ミスも減るでしょう。
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のエラーメッセージはかなりストレートな言葉になっていますから、日常的にはそういった煩わしさは感じないでしょう。その中でも、いくつか気をつけてほしいエラーがあります。
・「STRING または BINARY データは切り詰められました。」
単純なケタあふれのエラーです。5バイトの列に7文字を入れようとしたときなどに発生します。エラーを起こさないためには、もちろん決められたバイト数でセットする必要があります。
・「varchar 値 'aa' から int データ型に変換できませんでした。」
WHERE句に「'AAA'=1」なんて条件を書いてしまった場合に起こります。文字列であるAAAを無理やり数値に変換しようとしてエラーになっているわけです。直接的にこういう条件を書く人はいないでしょうが、システムの運用中に動的に生成されるSQLの中では、こうした事態も起こります。文字と数値が比較されるような設計にしないことがまずは大事ですが、改修、統合などが重なったり、設計慣れしていない場合などは、必ずしもベストのDB構造にならないことがほとんどでしょう。ある状態では動く('9'=1なら数値同士で比較される)けれど、ある状態ではエラーになる('A'=1になるとエラー)という、やっかいなものです。