- 締切済み
トリガ実行時のエラー (ADP + MSDE2000)
ADP + MSDE2000 環境にて、あるテーブルに下記のトリガを設定しました。 CREATE TRIGGER トリガ名 ON テーブル1 FOR DELETE AS BEGIN DECLARE @変数 varchar(32) SELECT @変数 = 列1 FROM deleted DELETE FROM テーブル2 WHERE テーブル2.列1 = @変数 END 意図するところは、別のテーブル (テーブル2) からの同一キー (列1) を持つレコードの連動削除です。 このトリガを仕込んだテーブルに対してADPのGUI (テーブルのデータシートビュー) より手動にて直接 レコード削除を試みると、 「キー列の情報が足りないか、正しくありません。更新の影響を受ける行が多すぎます。」 のエラーが発生します。 (データシートビューを一度閉じた後、再度開くと、意図したレコードは消えています) GUIを使用せず、DELETE文で削除した場合、このエラーは出ず、動作結果も意図通りなのですが、前述の エラーは無視してよいものでしょうか? トリガの記述で問題点、改善すべき箇所があれば、ご指摘頂けると幸いです。 尚、このテーブルには、この他に3つのトリガが記述されています。 (できれば1本にまとめたいのですが、力量不足 + 時間不足です) 字数制限の関係で、書けませんが、他のトリガとの兼ね合いで問題が生ずることはあり得るのでしょうか? コメントをお待ちしております。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kikaida-
- ベストアンサー率69% (37/53)
テーブル2のキー設定はありますか。 どちらにしてもメッセージは気にしなくてもいいです。 そんなものだったような気がします。 またSQLですが上記のものは以下のように簡素化できます。 delete from テーブル2 where 列1= (select 列1 from deleted)
お礼
コメントありがとうございます。 > テーブル2のキー設定はありますか。 キーとは、Primaryキーのことでしょうか? 一時テーブルではありませんので、当然あります。 テーブル1 = 親 テーブル2 = 子 で、テーブル1と2のレコードは1:Nの関係です。 > どちらにしてもメッセージは気にしなくてもいいです。 > そんなものだったような気がします。 私は気にしませんが、使う人に気にするな、と強要することはできません。 結局、この仕様は止めました。 もともと、このトリガは親/子レコードの整合性を保つためでしかないので、子レコードがある間は、親レコードの削除を禁止 (アプリケーションで) すればよい、と判断しました。 ありがとうございました。