sql server触发器的简单使用

sql server触发器用到的两个逻辑表:
deleted和inserted分别代表操作所变更的旧记录集和操作所产生的新记录集。
其中:
执行INSERT操作后deleted逻辑表为空,inserted逻辑表有数据;
执行DELETE操作后inserted逻辑表为空,deleted逻辑表有数据;
执行UPDATE操作后两个逻辑表都有数据,deleted为旧记录集,inserted为新记录集。
以上操作变更几条记录,逻辑表就会产生几条记录,多条记录可以在触发器中用游标处理。
如:

CREATE   TRIGGER  qf_trigger
   
ON   User_table
   
for   INSERT , DELETE , UPDATE
AS
BEGIN
    
declare   @userid   varchar ( 20 )

    
-- 保存旧值
     declare  rs  cursor   for
        
select  userid  from  deleted
    
open  rs
    
fetch   next   from  rs  into   @userid
    
while   @@fetch_status = 0
    
begin
        
if   update (用户名)
            
insert   into  old_users(userid)  values  ( @userid )
        
fetch   next   from  rs  into   @userid
    
end
    
close  rs
    
deallocate  rs

    
-- 保存新值
     declare  rs  cursor   for
        
select  userid  from  inserted
    
open  rs
    
fetch   next   from  rs  into   @userid
    
while   @@fetch_status = 0
    
begin
        
if   update (用户名)
        
begin
            
if ( @userid = ' admin ' )
            
begin
                
raiserror ( ' 此用户名禁用! ' , 10 , 1 with  nowait
                
rollback
                
return
            
end
            
insert   into  new_users(userid)  values  ( @userid )
        
end
        
fetch   next   from  rs  into   @userid
    
end
    
close  rs
    
deallocate  rs
END


在用INSERT,DELETE,UPDATE更新表时,如果触发器执行的操作失败,对表的操作也会回滚,并提示触发器程序产生错误的位置与原因。 

你可能感兴趣的:(sql,server,delete,insert)