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