測試的時候比較重要,我們可以知道當前交易影響了哪些表 --用于記錄 用戶 在當前表上什么時候、做的什么操作:update、insert、delete create table TriggerRecord ( operdt datetime,--觸發時間 opertp varchar(10),--操作類型:update、insert、delete ope
測試的時候比較重要,我們可以知道當前交易影響了哪些表
--用于記錄用戶在當前表上什么時候、做的什么操作: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'''','''''+name+''''');'')' from sysobjects where type='U' and name not in('T','TriggerRecord')
--將以上生成的語句拷貝出來執行
--用于生成刪除語句的觸發器,并將觸發器語句保存到表中
select 'insert into T values(''create trigger T_'+name+'_D on '+name+' for delete as insert into TriggerRecord values(getdate(),''''delete'''','''''+name+''''');'')' from sysobjects where type='U' and name not in('T','TriggerRecord')
--將以上生成的語句拷貝出來執行
--執行通過上面語句生成的語句后,再執行存儲生成觸發器的存儲過程
exec loopExecTrigger
--生成刪除全部以T開頭的觸發器的語句
select 'drop trigger '+name+';' from sysobjects where type='TR' and name like 'T_%'
馮立彬的博客
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com