【英文】Trigger
【定义】是一个能有系统自动执行对数据库修改的语句。
【用途】
1、主键和外键等约束不能保证的复杂的参照完整性和数据一致性
2、对数据库进行级联修改
3、实现比Check约束更为复杂的限制
4、比较数据修改前后的差别
5、强制表的修改要合乎业务规则
【语法结构】
注:
【触发器响应类型】:
1、后触发器(AfterTrigger)
2、前触发器(insteadof Trigger)
【特殊表】
【使用触发器实现复杂的参照完整性和数据一致性】
例:若修改SC中一个记录的学号,则要检查S中是否存在与该学号相同的记录,若有则不允许修改,若没有则可以修改.
CREATE TRIGGER TRIGGER_SC ON [dbo].[sc]
FOR UPDATE
AS
IF UPDATE(SNO)
BEGIN
DECLARE @SNO_NEW CHAR(2) ,@SNO_OLD CHAR(2),@SNO_CNT INT
SELECT @SNO_OLD=SNO FROM DELETED
SELECT @SNO_CNT=COUNT(*) FROM S
WHERE SNO=@SNO_OLD
IF @SNO_CNT<>0
ROLLBACK TRANSACTION
END
【使用触发器对数据库进行级联修改】
例:若修改表S中一学生的学号,则表SC中与该学生相关的学号被自动修改.
CREATE TRIGGER TRIGGER_S ON [dbo].[s]
FOR UPDATE
AS
IFUPDATE(SNO)
BEGIN
DECLARE @SNO_NEW CHAR(2) ,@SNO_OLD CHAR(2)
SELECT @SNO_NEW=SNO FROM INSERTED
SELECT @SNO_OLD=SNO FROM DELETED
UPDATE SC SET SNO=@SNO_NEW
WHERE SNO=@SNO_OLD
END
【使用触发器实现比CHECK约束更为复杂的限制】
例:为SC表创建一触发器,当插入一个记录或修改成绩时,确保此记录的成绩为0—100分.
CREATE TRIGGER TRIGGER_SC1 ON [dbo].[sc]
FOR INSERT, UPDATE
AS
DECLARE @SCORE TINYINT
SELECT @SCORE=SCORE FROM INSERTED
IF @SCORE>0 AND @SCORE<=100
BEGIN
PRINT ‘操作完成‘
return
end
print ‘成绩超出0-100‘
rollback transaction
原文地址:http://blog.csdn.net/cxl0921/article/details/44259825