为了跟踪当前操作界面会写入哪个表,对系统表做一个写表的日志,
快速生成所有表的触发器脚本
declare c_tbl cursor for SELECT OBJ.NAME AS [TABLE_NAME],obj.object_id as table_object_id FROM SYS.ALL_OBJECTS OBJ where 1=1 and obj.type='U' AND OBJ.object_id>0 ; declare @fetch_status_tbl int, @table_name nvarchar(128), @table_object_id bigint; begin /** -- 写表的日志表 create table Write_Table_Log( log_id int identity(1,1) primary key, table_name nvarchar(128), primary_field nvarchar(128), [event] nvarchar(128), creation_date datetime, [value] nvarchar(128) ); */ open c_tbl ; fetch next from c_tbl into @table_name, @table_object_id set @fetch_status_tbl = @@FETCH_STATUS while @fetch_status_tbl = 0 begin print 'if object_id(''' +@table_name +'_rv_tr'',''TR'') IS NOT NULL '; print ' drop trigger [' +@table_name +'_rv_tr];'; print 'GO '; print 'Create Trigger [' +@table_name +'_rv_tr] on [' +@table_name +'] '; print ' for insert, update ' print 'as ' print 'begin ' print ' declare @AutoID nvarchar(120) '; print ' select @AutoID = null from inserted'; print ' insert into dbo.Write_Table_Log([table_name],primary_field,[event],creation_date,[value]) '; print ' values( '''+@table_name+''',null,''update'',getdate(),@AutoID);'; print 'end;'; print 'GO' print ' '; fetch next from c_tbl into @table_name, @table_object_id set @fetch_status_tbl = @@FETCH_STATUS end; close c_tbl; deallocate c_tbl; end;
待解决问题:
1、确定表主键
2、主键对应的值。