测试的时候比较重要,我们可以知道当前交易影响了哪些表
--用于记录用户在当前表上什么时候、做的什么操作:update、insert、delete create table TriggerRecord ( ?operdt datetime,?--触发时间 ?opertp varchar(10),?--操作类型:update、insert、delete ?opertb varchar(50)?--表名 ) --这个表于用保存生成的触发器语句,在过程中循环执行 --因为Sqlserver不允许在一个批次同时执行多条create trigger语句 create table T(sqlTrigger varchar(500)) --循环执行存于表中触发器的存储过程 create proc loopExecTrigger as begin ?declare @sql varchar(500) ?declare cur cursor for select sqlTrigger from T ?open cur ?fetch cur into @sql ?while @@fetch_status=0 ?begin ??execute(@sql) ??fetch cur into @sql ?end ?close cur ?deallocate cur ?delete T end
--用于生成插入语句的触发器,并将触发器语句保存到表中 select 'insert into T values(''create trigger T_'+name+' on '+name+' for insert as insert into TriggerRecord values(getdate(),''''insert'''','''''+name+''''');'')' from sysobjects where type='U' and name not in('T','TriggerRecord') --将以上生成的语句拷贝出来执行
--用于生成更新语句的触发器,并将触发器语句保存到表中 select 'insert into T values(''create trigger T_'+name+'_U on '+name+' for update as insert into TriggerRecord values(getdate(),''''update'''','TriggerRecord') --将以上生成的语句拷贝出来执行
--用于生成删除语句的触发器,并将触发器语句保存到表中 select 'insert into T values(''create trigger T_'+name+'_D on '+name+' for delete as insert into TriggerRecord values(getdate(),''''delete'''','TriggerRecord') --将以上生成的语句拷贝出来执行
--执行通过上面语句生成的语句后,再执行存储生成触发器的存储过程 exec loopExecTrigger
--生成删除全部以T开头的触发器的语句 select 'drop trigger '+name+';' from sysobjects where type='TR' and name like 'T_%'
本文出自:冯立彬的博客
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|