« RD-Style | トップページ | SQLServerで困ったぞシリーズ2 »

2006/01/03

SQLServerで困ったぞシリーズ

↓これ、SQLServer2000のクエリアナライザで、このまんまコンパイル通るんですけど。設定でなんとかなるのか?

CREATE PROCEDURE spTEST01 AS
BEGIN
    INSERT 存在しないテーブル SELECT * FROM これも存在しないテーブル
END

こんなストアドをdelphiから実行すると、とても困ったことが起きるんですよ。

TADOStoredProc経由で実行してもエラーにならなず、普通にコミットできちゃう。しかも、問題のあるSQL文の直前まではコミットされているが、それ以降のSQL文は実は全く実行されていない。つまり、問題のあるSQL文の前後で整合性がとれていない状況ができあがる。フォー。

コミット後にADOStoredProc1.Parametersなどを参照すると「アクティブなトランザクションがありません。」となることがあるが、こんなエラーメッセージを出されても何がなんだか分からん。まさか、作成済のストアドに実はコンパイルエラーがあるなんて考えもしないから、問題解決まで一体どれほど苦労したことか。

今回、誰が悪いのかといえば、ストアドをデバッグした人かと思ったら、テーブルを削除した人がいて...。それにも係わらずストアドがコンパイルエラーにならないのもどうかと。そして、そんなストアドを実行してもエラーにならないのもどうかと。

環境: Delphi5ent + ADOExpress + SQLServer2000

|

« RD-Style | トップページ | SQLServerで困ったぞシリーズ2 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/36845/7975957

この記事へのトラックバック一覧です: SQLServerで困ったぞシリーズ:

« RD-Style | トップページ | SQLServerで困ったぞシリーズ2 »