SQL 触发器

上一篇 / 下一篇  2008-11-18 09:41:34 / 个人分类:SQL

SQL触发器有3种: insert触发器.update触发器.delete触发器
insert触发器:用insert语句向表中插入数据时都会执行的触发器.当触发insert触发器时新的数据行就会被插入到触发器表和inserted表中。inserted表是一个逻辑表它包含了已经插入的数据行的一个副本。
例:
createtrigger tri_insert 
onstudent
forinsert
as
declare@student_id char(10)
select@student_id=s.student_idfrom
student s inner join
insertedi
on s.student_id=i.student_id
if @student_id='000000001'
begin
    raiserror('can't insert number 1',16,8)
    rollback tran
end
go
delete触发器:当触发delete触发器后从受影响的表中删除的行将被放置到一个特殊的deleted表中。deleted表是一个逻辑表它保留已被删除数据行的一个副本。
  • 当某行被添加到deleted表中时,它就不再存在于数据库表中;因此,deleted表和数据库表没有相同的行。
  • 创建deleted表时,空间是从内存中分配的。deleted表总是被存储在高速缓存中。
  • DELETE动作定义的触发器并不执行TRUNCATE TABLE语句原因在于日志不记录TRUNCATE TABLE语句。
例:
create trigger tri_delete
on student 
for delete 
as 
declare @student_id varchar(10)
select @student_id=student_id from deleted 
if @student_id='admin' 
begin
   raiserror('错误',16,8
   
rollback tran 
end
update触发器:可将update语句看成两步操作即捕获数据前像(before image)的delete语句和捕获数据后像(after image)的insert语句。当在定义有触发器的表上执行update语句时原始行前像)被移入到deleted更新行后像)被移入到inserted表。
例:
create trigger tri_update 
on student
for update
as 
if update(student_id) 
begin
   raiserror('学号不能修改!',16,8
   
rollback tran 
end

go

TAG: SQL

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-29  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 17712
  • 日志数: 25
  • 文件数: 5
  • 建立时间: 2007-12-25
  • 更新时间: 2012-09-11

RSS订阅

Open Toolbar