こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

トリガ実行時のエラー (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本にまとめたいのですが、力量不足 + 時間不足です)
字数制限の関係で、書けませんが、他のトリガとの兼ね合いで問題が生ずることはあり得るのでしょうか?

コメントをお待ちしております。

投稿日時 - 2005-04-30 21:55:04

QNo.1361142

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

テーブル2のキー設定はありますか。
どちらにしてもメッセージは気にしなくてもいいです。
そんなものだったような気がします。

またSQLですが上記のものは以下のように簡素化できます。

delete from テーブル2 where 列1= (select 列1 from deleted)

投稿日時 - 2005-05-02 13:07:53

お礼

コメントありがとうございます。

> テーブル2のキー設定はありますか。
キーとは、Primaryキーのことでしょうか?
一時テーブルではありませんので、当然あります。
テーブル1 = 親
テーブル2 = 子
で、テーブル1と2のレコードは1:Nの関係です。

> どちらにしてもメッセージは気にしなくてもいいです。
> そんなものだったような気がします。

私は気にしませんが、使う人に気にするな、と強要することはできません。
結局、この仕様は止めました。
もともと、このトリガは親/子レコードの整合性を保つためでしかないので、子レコードがある間は、親レコードの削除を禁止 (アプリケーションで) すればよい、と判断しました。

ありがとうございました。

投稿日時 - 2005-05-02 22:19:03

あなたにオススメの質問