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

--为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
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值