触发器

--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

 

posted @ 2010-05-10 12:39  rob_2010  阅读(157)  评论(0)    收藏  举报