sqlserver2005的触发器的使用

来源:互联网 发布:剑灵龙族男人数据图 编辑:程序博客网 时间:2024/06/08 15:17

use w3
go

create table test1
(
 id int primary key identity(1,1),
 name varchar(200) not null
)
go

create table test2
(
 id int primary key identity(1,1),
 test1_id int foreign key(test1_id) referencestest1(id)
)
go

insert into test1 values('张三')

insert into test1 values('张三1')

insert into test2 values(1)
insert into test2 values(2)

select *from test1
select *from test2

----------------------------------触发器的使用 as后边写你在执行某个操作时想触发的其它操作
--DML( 数据操纵语言 Data ManipulationLanguage)触发器:是指触发器在数据库中发生DML事件时将启用。
--DML事件即指在表或视图中修改数据的insert、update、delete语句。 常用的是这种触发器

--DDL(数据定义语言 Data DefinitionLanguage)触发器:是指当服务器或数据库中发生(DDL事件时将启用。
--DDL事件即指在表或索引中的create、alter、drop语句也。

--登陆触发器:是指当用户登录SQL SERVER实例建立会话时触发。


-------------创建一个触发器,这里的意思是 对test1表创建一个叫mytrigger的触发器,当执行update操作时就触发事件,执行as后边的语句
create trigger mytrigger on test1
for update
as
   print '表更新完成!'


------------------------------------查看触发器的内容
exec sp_helptext mytrigger


--------------------查询当前数据库中有多少触发器,以方便进行数据维护
select *from sysobjects where xtype='TR'

--------------------关闭或开启触发器  禁用和开启触发器都需要一定的权限,如果权限不够是无法进行操作的
disable trigger mytrigger on database
enable trigger mytrigger on database


----------那触发器的功能虽大,但是一旦触发,恢复起来就比较麻烦了,那我们就需要对数据进行保护,这里就需要用到rollback数据回滚~
alter trigger mytrigger on test1
for update
as
 if exists(select *from test2)
 rollback

update  test1 set name='李四' where id=1

0 0