触发器练习三

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

原文地址:https://www.cnblogs.com/cuig/p/8068074.html