zoukankan      html  css  js  c++  java
  • 触发器练习三

    题目一: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

  • 相关阅读:
    maven安装
    VMware workstation安装报Microsoft Runtime DLL和Intel VT-x错误
    jQuery的拾色器
    Distributed Representations of Words and Phrases and their Compositionality
    Deep Learning for Natural Language Processeing:vector space models
    Deep Learning for Natural Language Processeing : Convex Optimization
    Java Web的一些基础知识
    Java Web1: 邮件发送系统(JSP+Servlet+JavaBean)
    学习效率与方法
    Deep Learning6: Convolution and pooling
  • 原文地址:https://www.cnblogs.com/cuig/p/8068074.html
Copyright © 2011-2022 走看看