--创建触发器
--触发器 保证数据完整性,与表事件相关的特殊的存储过程,由事件触发
--比如当对一个表进行操作时(alter,delete,update)
DELETE Student
WHERE Sno='1201011102'
SELECT *
FROM Student
WHERE Sno='1201011102'
--插入一条新记录
INSERT INTO Student
(Sno,Sname,Ssex,EntranceTime,Classno)
VALUES
('11099','字符串','男','2000-01-01','11010111')
--查询插入的新记录
SELECT *
FROM Student
WHERE Sno='11099'
--如果要真的删除,需要禁用表里面的delete_student触发器
DELETE Student
WHERE Sno='11099'
ALTER TRIGGER [dbo].[update_sname]
on [dbo].[Student]
FOR UPDATE --INSTEAD OF UPDATE
AS
IF UPDATE(Sname)
BEGIN
PRINT '不能修改学生的姓名'
ROLLBACK TRANSACTION
END
ELSE IF UPDATE(Ssex)
BEGIN
PRINT '不能修改学生的性别'
ROLLBACK TRANSACTION --撤销操作
END
--测试代码,检查触发器功能是否正常
UPDATE Student
SET Sname ='zfc'
WHERE Sno='1101011101'
UPDATE Student
SET Ssex ='m'
WHERE Sno='1101011101'
SELECT *
FROM Student
WHERE Sno='1101011101'
--创建一个触发器,针对于teacher表,如果有人要修改教师的姓名,就输出不能修改教师姓名
CREATE TRIGGER T_UPDATENAME
ON Teacher --对Teacher表起作用
FOR UPDATE --触发条件,insert,delete
AS
IF UPDATE(Tname)
BEGIN
PRINT '不能修改教师姓名'
ROLLBACK TRAN --事物回滚
END
--测试代码,验证触发器是否有效
UPDATE Teacher
SET Tname='字符串'
WHERE Tno='0101'
SELECT *
FROM Teacher
WHERE Tno='0101'
--
ALTER TRIGGER T_INSERT
ON Teacher
FOR INSERT
AS
--两张特殊的表,INSERTED ,DELETED(隐藏),记录刚刚插入或者删除的记录
DECLARE @Tno char(4) --定义的局部变量用来保存从系统表中查出的教师的工号
SELECT @Tno=Tno
FROM INSERTED
PRINT @Tno
IF LEFT(@Tno,2)!='11'
PRINT '不能插入该记录'
ROLLBACK TRAN
--测试触发器语句
INSERT INTO Teacher
(Tno,Tname,Ttitle)
VALUES
('0997','ZIFUCHUAN','教授')
SQL trigger class notes
Guess you like
Origin blog.csdn.net/csdcainiao/article/details/106678699
Ranking