• 触发器练习三


    题目一:INSERT触发器,在学生表(Stu)插入一条新数据的时候触发,学生课程表(Stu_Course)增加三条记录,新学生加入语文、数学、英语三门课程

    CREATE TRIGGER INSERT_Stu_Course    ON  dbo.Stu   

    AFTER  INSERT

    AS

    BEGIN

     --定义两个变量  @studentid,@studentname   DECLARE @studentid INT;   DECLARE @studentname VARCHAR(50);

    --给两个变量赋值

    Inserted 表为 学生表执行插入操作之后的临时表(存储插入后的数据)  

    SELECT @studentid=studentid FROM Inserted;  

    SELECT @studentname=studentname FROM Inserted;

    --给学生课程表插入三条记录,新学生加入语文、数学、英语三门课程

     INSERT dbo.Stu_Course           ( studentid, courseid, studentname )   VALUES  ( @studentid, -- studentid - int             101, -- courseid - int             @studentname  -- studentname - nvarchar(50)             );

     INSERT dbo.Stu_Course           ( studentid, courseid, studentname )   VALUES  ( @studentid, -- studentid - int             102, -- courseid - int             @studentname  -- studentname - nvarchar(50)             );

     INSERT dbo.Stu_Course           ( studentid, courseid, studentname )   VALUES  ( @studentid, -- studentid - int             103, -- courseid - int             @studentname  -- studentname - nvarchar(50)             );

    END GO

    题目二:删除触发器,删除学生表的一条记录,同时删除改学生的学生课程表的记录

    CREATE TRIGGER DELETE_Stu   

    ON dbo.Stu   

    AFTER DELETE

    AS

    BEGIN  

      --定义一个变量,@studentid   

    DECLARE @studentid INT;   

    --给变量赋值 @studentid,表deleted是在执行删除操作之前的临时表用来存储操作之前的记录。   

    SELECT @studentid=studentid FROM Deleted;   

    DELETE dbo.Stu_Course WHERE studentid=@studentid;

    END GO

    题目三:update触发器,更改学生表Stu中的学生编号,学生课程表(Stu_Course)的学生编号也随之改变

    CREATE TRIGGER UPDATE_Stu   

    ON  dbo.Stu   

    AFTER UPDATE

    AS

    BEGIN

        --定义变量

    @studentid  DECLARE @studentid INT;

     --给@studentid 赋值 DELETED表用来存储操作之后的记录的临时表

     SELECT @studentid=studentid FROM inserted

     UPDATE dbo.Stu_Course SET studentid=@studentid

    END

    GO

    题目四:instead of 触发器 用在执行操作之前,可以用在表和视图上,常用于数据库操作之前的检查。

    CREATE TRIGGER CHECKID_Stu_Course

    ON dbo.Stu_Course    

    INSTEAD OF INSERT AS    

    --定义变量    

    DECLARE @studentid INT;     DECLARE @courseid INT;

    --变量赋值    

    SELECT  @studentid = studentid     FROM    Inserted;    

    SELECT  @courseid = courseid     FROM    Inserted;

    --判断学生编号是否在学生表内,如果不存在回滚打印    

    IF NOT EXISTS ( SELECT  *  FROM   dbo.Stu  WHERE   studentid = @studentid )       

     BEGIN            

    ROLLBACK TRANSACTION;            

    PRINT '学生表不存在' + CONVERT(VARCHAR(50),@studentid)+ '这个学生编号';        

    END;

    --若存在继续执行下一条判断     ELSE --继续判断课程编号是否在课程表内,如果不存在就回滚打印        

    IF NOT EXISTS ( SELECT  *    FROM    dbo.Couser    WHERE   courseid = @courseid )            

    BEGIN                

    ROLLBACK TRANSACTION;                

    PRINT '课程表不存在' + CONVERT(VARCHAR(50),@courseid) + '这个课程编号';     

     END;        

    ELSE --条件符合,执行插入,这个可以不加            

    BEGIN                

    INSERT  INTO dbo.Stu_Course   SELECT  *   FROM    Inserted;              

    END;

    GO

  • 相关阅读:
    C#数据结构与算法系列(十三):递归——迷宫问题
    C#数据结构与算法系列(十二):递归(Recursion)
    C#数据结构与算法系列(十一):中缀表达式转后缀表达式
    C#数据结构与算法系列(十):逆波兰计算器——逆波兰表达式(后缀表达式)
    Quartz.Net系列(八):Trigger之CalendarIntervalScheduleBuilder详解
    Quartz.Net系列(七):Trigger之SimpleScheduleBuilder详解
    C#数据结构与算法系列(九):栈实现综合计算器(中缀表达式)
    Redis系列(五):数据结构List双向链表源码解析和API实现
    Quartz.Net系列(六):Quartz五大构件Trigger之TriggerBuilder解析
    C#数据结构与算法系列(八):栈(Stack)
  • 原文地址:https://www.cnblogs.com/cuig/p/8068074.html
Copyright © 2020-2023  润新知