2

私はストアド プロシージャを初めて使用するので、皆さんの助けが必要です。Event_Session、Event_Speaker、Session_Speaker の 3 つのテーブルがあります。Event_session_id を渡して Event_Session レコードを削除したいのですが、Session_Speaker と Event_Speaker レコードも同時に削除する必要があります。ここにテーブルがあります

Event_Session (フィールドを含むテーブル)

Event_Session_Id、Session_name、Session_Description、タグ

ナビゲーション プロパティ: Session_Speaker

Session_Speaker (フィールドを持つテーブル)

Event_Session_Id、Event_Speaker_Id、created_date

ナビゲーション プロパティ: Event_Session 、 Event_Speaker

Event_Speaker (フィールドのあるテーブル)

Event_Speaker_Id、Speaker_name、Created_date

ナビゲーション プロパティ : Session_Speaker

4

2 に答える 2

4

実際には、テーブルからのアクションのトリガーが必要です。DELETEEvent_Session

delimiter $$
CREATE TRIGGER Event_Session_Trigger
AFTER delete ON Event_Session
FOR EACH ROW
BEGIN

    DELETE FROM Event_Speaker ss 
    WHERE 
      ss.Event_Speaker_Id = (
           SELECT
              Event_Speaker_Id
           FROM Session_Speaker es
           WHERE
              es.Event_session_id = old.Event_session_id
      )

    DELETE FROM Session_Speaker  es 
    WHERE 
      es.Event_session_id = old.Event_session_id        

END$$
delimiter ;

更新:同義語の手順を要求したとおり:

DELIMITER // 
CREATE PROCEDURE Event_Session_Procedure(IN Event_Session_Id_Delete INT) 
BEGIN 
    DECLARE Event_Speaker_Id_Delete INT;

    SELECT
      Event_Speaker_Id INTO Event_Speaker_Id_Delete
    FROM Session_Speaker es
    WHERE
      es.Event_session_id = Event_Session_Id_Delete

    DELETE FROM Event_Session e
    WHERE 
      e.Event_session_id = Event_Session_Id_Delete

    DELETE FROM Session_Speaker  es 
    WHERE 
      es.Event_session_id = Event_Session_Id_Delete

    DELETE FROM Event_Speaker ss 
    WHERE 
      ss.Event_Speaker_Id = Event_Speaker_Id_Delete

END // 
DELIMITER ; 

実行することで実行できますCALL Event_Session_Procedure(123);123 はEvent_Session_Id削除したいものです

于 2013-06-06T07:26:31.067 に答える