删除id=9的数据
delete FROM MyStudentInfo where Id=9
查询备份表数据
select * from MyStudentInfo_Back
3、update触发器
IF (object_id('tr_Update','tr') is not null) drop TRIGGER tr_Update GO CREATE trigger tr_Update on MyStudentInfo for update as begin --声明变量,存储更新前和更新后的姓名 declare @OldName varchar(16),@NewName varchar(16) select @OldName=name from DELETED print '更新前姓名:'+@OldName select @NewName=name from INSERTED print '更新后姓名:'+@NewName end
把张三更新为"张三测试"
update MyStudentInfo SET Name='张三测试' where Id=1
update更新列级触发器
--update更新列级触发器 IF (object_id('tr_update_column','tr') is not null) drop TRIGGER tr_update_column GO CREATE trigger tr_update_column on GradeInfo for update as begin IF(update(id)) begin print '系统提示:主键ID不能更新' rollback end end
更新id列
update GradeInfo SET Id=15 where Id=4
4、instead of触发器
instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身的内容,其优先级高于定义的SQL语句的执行
语法:
create trigger tgr_name on table_name with encryption instead of update... as begin T-SQL end
创建instead of触发器
--创建instead of触发器 /*MyStudentInfo表里面插入数据之前,先判断GradeInfo表中是否有对应的班级ID,如果没有,不允许插入,如果存在,则插入 */ IF (object_id('tr_insteadOf','tr') is not null) drop TRIGGER tr_insteadOf GO CREATE trigger tr_insteadOf on MyStudentInfo instead of insert as begin IF exists(SELECT * FROM GradeInfo WHERE Id=(SELECT GradeId FROM INSERTED)) print '该班级存在,可以插入' else begin print '该班级不存在,不可以插入' rollback end end
测试1,插入不存在的班级id
insert INTO MyStudentInfo (GradeId) VALUES (15)
测试2,插入存在的班级id
insert INTO MyStudentInfo (GradeId) VALUES (5)
DDL触发器
? create trigger tr_DDL on database ? for DROP_TABLE,ALTER_TABLE ? as ??? begin ????? print '别想着删库!好好打你的代码' ?? rollback --回滚 ?end
测试删除表
drop TABLE MyStudentInfo
测试修改表结构
alter table MyStudentInfo alter column Name varchar(32)
禁用DML触发器
disable trigger tr_insteadOf on MyStudentInfo
启用DML触发器
enable trigger tr_insteadOf on MyStudentInfo
禁用DDL触发器
disable trigger tr_DDL on database
启用DDL触发器
enable trigger tr_DDL on database
到此这篇关于SQL SERVER触发器详解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
更多SQL内容来自木庄网络博客