内容
SQLSERVER ストアドプロシージャ 初心者向け 使い方 注意点 デバッグの方法は?
自分がストアドプロシージャを触り始めていろいろと気づいたことを書いていきます。
もしかすると今後さわることもなくて、数年後にまた使うことがあるので、忘れないために備忘録です。
私自身がストアドプロシージャを触り始めてまだ半年程度なので、気づいていない点や勘違いをしていることがあります。その点をご考慮ください。
現在使用しているバージョンはSQLSERVER2008です。
1.SQLSERVER のストアドには ELSEIF がない、ELSIFもない
つまり
IF
ELSE
のみです。
ちょっとびっくりです。いろんなプログラム言語を触ってきましたけど、ELSEIFがないなんてとっても不便なはず。さすがマイクロソフトです。どこか抜けていて使う側の利便性を考えない会社です。というかたぶん人の出入りが多すぎてソフトウェアの課題をまとめる人材がいないのでしょう。
だからSQLSERVERで複数のIF文を作る場合は、
入れ子にしてどんどん作るか、個別に考えてIF文を複数作るしかありません。
「ELSE IF」として見える部分は実際は
IF
ELSE
IF
です。つまり、最初のIF文の入れ子です。
だから多くの分岐があるときはCASEを使うということなのでしょうかね。
2.SQLSERVER2008ではデバッグができるはず
バージョン2008ではストアドプロシージャのデバッグ、ステップ実行ができるそうです。
でもいろいろとポートの設定やらがあって今はうまくいっていません。
ではどうやってデバッグするのかというと、
とりあえず、Printや途中の変数を受け取り側で取得することです。
例えば、SQLSERVERのストアドプロシージャを使ってDBからデータを取得し、ASPでデータを表示させる場合、
ストアドプロシージャの必要な箇所に変数を作りそこにデータや値を入れます。
できればテーブル型を作って配列みたいに利用すると良いと思います。
そして、ASP側でResponse.Wirteで値を確認します。つまりトレースします。
最初は、どの部分にバグがあるのか見当をつけるために、多くのバグ用の変数が必要になります。
>いまここ
3.検索 どのテーブル、ストアドに使用されているかカラムを探したい、
sp_help3 'カラム名'
とクエリに書いて実行します。
するとどのストアドに記載されているか、または使用されているテーブル名が表示されます。
多くのテーブルやストアドを有するDBで、カラムを探したりするのに便利です。