用游标实现为数据库的每个用户表添加结构相同的触发器

-- 为synchroflow_log数据库里面的每个表加一个log_mode字段
use  synchroflow_log
exec  sp_MSforeachtable  ' alter table ? add log_mode char(2) '

-- 创建mainMoniter表
create   table  mainMoniter(mode  char ( 2 ),tablename  varchar ( 50 ),changetime  char ( 20 ))


-- 将synchroflow数据库里面的表的名称插入到一个临时表
SELECT  name  into  #tt  FROM  sysobjects  WHERE  (type  =   ' u ' )


use  synchroflow
-- 定义游标,通过游标为每个表建立触发器
declare   @table_name   varchar ( 100 )

declare  cursor_temp  cursor   for   select  name  from  #tt

open  cursor_temp

fetch   next   from   cursor_temp  into   @table_name

while   @@fetch_status = 0
begin
    
declare   @sql_A   varchar ( 1000 )
    
declare   @sql_U   varchar ( 1000 )
    
declare   @sql_D   varchar ( 1000 )
    
    
set   @sql_A = ' create  trigger  ' + @table_name + ' _A on  ' + @table_name + '  for insert as insert into synchroflow_log.dbo. ' + @table_name + '  select *, '' A ''  as log_mode from inserted  insert into synchroflow_log.dbo.mainMoniter select  '' A '' , ''' + @table_name + ''' ,convert(char(19),getdate(),120) from inserted '
    
        
set   @sql_U = ' create trigger  ' + @table_name + ' _U on  ' + @table_name + '  for update as insert into synchroflow_log.dbo. ' + @table_name + '  select *, '' U ''  as log_mode from deleted   insert into synchroflow_log.dbo.mainMoniter select  '' U '' , ''' + @table_name + ''' ,convert(char(19),getdate(),120) from deleted '
    
    
set   @sql_D = ' create trigger  ' + @table_name + ' _D on  ' + @table_name + '  for delete as insert into synchroflow_log.dbo. ' + @table_name + '  select *, '' D ''  as log_mode from deleted   insert into synchroflow_log.dbo.mainMoniter select  '' D '' , ''' + @table_name + ''' ,convert(char(19),getdate(),120) from deleted '
    
    
exec ( @sql_A )
    
exec ( @sql_U )
    
exec ( @sql_D )
        
fetch   next   from   cursor_temp  into   @table_name
end

close  cursor_temp
deallocate  cursor_temp

-- 删除临时表
drop   table  #tt
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值