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

2006年1月 3日 (火)

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 »

delphi」カテゴリの記事

SQLServer」カテゴリの記事

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

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

トラックバック

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

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

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