触发器
--DDL触发器
create trigger trigger_name
on { ALL server | database}
{for | after} {event_type}
as {sql_stat}
trigger_name指定创建的触发器的名称
All Server指定将DDL触发器的作用域应用于当前服务器。如果指定了此参数,则只要当前服务器中的任何位置上出现Event_type都会激发该触发器
DataBase指定将DDL触发器的作用域应用于当前数据库。如果指定了此参数,则只要当前数据库中出现event_type都会激发该触发器
Event_type指定将导致激发DDL触发器的Transact_SQL语言事件
Sql_stat指定出发后的操作
指定for与指定After相同,前者是SQL Server早期版中唯一可用的选项,表示触发器在DDL语句执行后,立即触发
--创建一个名为tigger_name的触发器
create trigger trigger_name on database
for drop_table,alter_table
as
print '触发器safety禁止删除或修改,除非禁用safety触发器'
rollback
--测试触发器
drop table usersRating
go
--删除触发器的语法
drop trigger trigger_name
on [all server|database]
--检查触发器是否存在
if exists(select * from sys.triggers where parent_class=0 and name='trigger_name')
--删除触发器的语法
drop trigger trigger_name
on database
--禁用和启用DDL触发器
disable|enable trigger on [all server|database]
if exists(select * from sys.triggers where parent_class=0 and name='trigger_name1')
drop trigger trigger_name1 on database
go
create trigger trigger_name1
on database for drop_table,alter_table
as
print '触发器trigger_name1禁止删除或修改表,除非禁用trigger_name1触发器'
rollback
go
--禁用触发器
disable trigger trigger_name1 on database
go
--禁用触发器后可以对数据库中的表进行删除
drop table UsersRating
--DML触发器语法
create trigger [schema_name.]trigger_name
on {table | view}
{for|after|instead of}
{[insert][,][update][,][delete]}
as{ sql_statement}
--创建Insert触发器,当执行插入操作时插入数据
if exists(select * from sys.objects where name ='ExaltSalary' and type='tr')
drop trigger exaltSalary
go
create trigger exaltSalary
on UserFriends
for insert
as
insert into UserFriends(id,UserId,FriendUserId,FriendType) values(9,3,8,1)
--判断当前触发器是否存在
if exists(select * from sys.objects where name='ExaltSkill')
drop trigger ExaltSkill
go
--创建delete触发器,当执行Delete操作时修改数据
create trigger ExaltSkill
on userFriends
for delete
as
update userFriends set friendUserId=3 where id=11
--判断当前触发器是否存在 如果存在则删除
if exists(select * from sys.objects where name='insertEx')
drop trigger insertEx
go
create trigger insertEx
on userFriends
for insert
as
begin
print '不能修改数据'
rollback
end

浙公网安备 33010602011771号