SQLServerのストアド
はまった…
仕事でdb本体はSQLServer2k、フロントエンドをAccessでちょっとしたdbアプリを作る事になりまして。
えっちらおっちら作ってたもんだからかなり時間がかかったんだけど ^^;
漸く完成?というか、テスト出来る段階まできたんで、検証がてら納品したところ、早速エラーが。。。orz
エラーの発生箇所は、新規データの登録(insert)処理んとこで、エラーの内容は以下。
-2147217872
型の名前が無効です。
なんすか、こりは?自分のPCではエラーなんて起きてませんが?w
とりあえず調査したところ、結論からいうと、ストアドに渡している日付型データのフォーマットがまずってた。
普通に2008/02/13といったフォーマットで渡してたんだけど、どうやら2008-02-13といったフォーマットで
渡してやらないと駄目らしい。
sql文とかでは、普通に
select * from T_在庫 where 入庫日 between '2008/01/01' and '2008/01/31';
とかでいけるのに、ストアドでは駄目って…
対処方法は、SQLServer側のCONVERT関数使って、ストアド内で渡された日付型データのフォーマットを変えてやればうまくいった。
↓みたいな感じ。
CONVERT(datetime, @hogedate, 20)
ちなみに、第3引数のstyleの部分は120でもOKらしい。試してないけどw
で、自分のPCではエラーが発生しなかったのに、ユーザーさんのPCではエラーが発生した原因は
全くの想像ではあるが、自分のPCにインストールされている Enterprize Manager が暗黙的に
型変換フォーマット変換というか、うまいこと解釈してくれてたのではないかと。
まぁ、今回の件でクエリアナライザでのストアドdebugのやり方もわかったのでOKOKw
クエリアナライザでのストアドのdebugの方法は、また後で載っけてみようと思う。