可以做个函数,记录用户的操作类型,时间等,把这些内容插入到一个表里在所有的菜单里,加上这个函数,把菜单名传个那个函数
解决方案 »
- 急:数据库错误:进程 90 发生了严重的异常 c0000005 EXCEPTION_ACCESS_VIOLATION
- 存储过程问题
- SQL SERVER 安装失败 求解答
- 如何在数据表中的多个字段中找到特定的字符的问题
- 请问初学数据库,应该用什么,FoxPro,SQL Server 还是 Oracle,还是其他?
- plsql重复安装问题
- 各位老大帮我一把把 很简单的问题
- 请问如何对sql数据库中的bit类型字段求反??在线等....
- 用存储过程实现同一表中选取一条记录(含image字段),生成新的主键,然后插入到该表中?
- 请教高手!!难题!
- 求教用友ERP中是怎么实现多个数据库同时访问的!(急)
- win2003无法装上MSSQL总提示无法验证产品密匙..HELP
演示了如何通过触发器来记录来表的操作情况
并记录了数据操作的明细资料
操作员由前台在处理时,传递到 operator 表中
触发器通过取该表数据得到当前操作的操作员
演示了如何得到修改触发器中,如果取得被修改字段的字段名
如果在每个工作站,只会有一个客户端软件打开
则可以只在登录客户端软件时,注册当前用户
而不需要每次操作时,都在 operato 中登记操作员--邹建 2004.08--*/--示例--操作记录主表
create table Log_main(
编号 int identity(1,1),
修改人 varchar(10),
表名 sysname,
动作 char(4),
时间 datetime default getdate()
)--操作记录明细表
create table Log_record(
编号 int,
字段 sysname,
修改前值 sql_variant, --记录新增或修改前的值
修改后值 sql_variant --记录删除或修改后的值
)--为传递操作员而设置的辅助表
create table operator(
操作员 varchar(10),
时间 datetime default getdate(),
工作站号 char(8) default host_id(),
登录名 sysname default suser_sname()
)
go--处理示例表
create table 表A(ID int,NAME varchar(10),AGE int,SEX bit)
go--记录的触发器
--记录新增操作
create trigger tr_表A_reinsert on 表A
for insert
as
set rowcount 1
insert Log_main(修改人,表名,动作)
select 操作员,'表A','新增' from operator
where 工作站号=host_id() and 登录名=suser_sname()
order by 时间 desc
set rowcount 0
insert Log_record(编号,字段,修改前值)
select scope_identity(),'ID',cast(id as sql_variant) from inserted
union all
select scope_identity(),'NAME',cast(NAME as sql_variant) from inserted
union all
select scope_identity(),'AGE',cast(AGE as sql_variant) from inserted
union all
select scope_identity(),'SEX',cast(SEX as sql_variant) from inserted
go--记录删除操作
create trigger tr_表A_redelete on 表A
for delete
as
set rowcount 1
insert Log_main(修改人,表名,动作)
select 操作员,'表A','删除' from operator
where 工作站号=host_id() and 登录名=suser_sname()
order by 时间 desc
set rowcount 0
insert Log_record(编号,字段,修改后值)
select scope_identity(),'ID',cast(id as sql_variant) from deleted
union all
select scope_identity(),'NAME',cast(NAME as sql_variant) from deleted
union all
select scope_identity(),'AGE',cast(AGE as sql_variant) from deleted
union all
select scope_identity(),'SEX',cast(SEX as sql_variant) from deleted
go--记录修改操作
create trigger tr_表A_reupdate on 表A
for update
as
select mid=identity(int,1,1),* into #i from inserted
if @@rowcount=0 return
select mid=identity(int,1,1),* into #d from deleteddeclare @id int,@s nvarchar(4000)declare #tb cursor local for
select 'insert Log_record(编号,字段,修改前值,修改后值)
select @id,'''+name
+''',cast(d.['+replace(name,']',']]')+'] as sql_variant)'
+',cast(i.['+replace(name,']',']]')+'] as sql_variant)
from #d d,#i i where i.mid=d.mid'
from syscolumns
where id=object_id('表A')
and (substring(columns_updated(),(colid-1)/8+1,1)
&power(2,(colid-1)%8))=power(2,(colid-1)%8)
order by colidset rowcount 1
insert Log_main(修改人,表名,动作)
select 操作员,'表A','修改' from operator
where 工作站号=host_id() and 登录名=suser_sname()
order by 时间 desc
set rowcount 0
set @id=scope_identity()open #tb
fetch #tb into @s
while @@fetch_status=0
begin
exec sp_executesql @s,N'@id int',@id
fetch #tb into @s
end
close #tb
deallocate #tb
go--插入记录
--插入前,先传递操作员给触发器
insert operator(操作员) values('admin')
insert 表A select 1,'CHRI',21,1
insert 表A select 2,'AAAA',22,0
union all select 3,'BBBB',23,1
go--修改记录
--修改前,先传递操作员给触发器
insert operator(操作员) values('admin')
update 表A set AGE=28,SEX=0
where id=2
go--删除记录
--修改前,先传递操作员给触发器
insert operator(操作员) values('我')
delete from 表A where id=3go--显示记录结果
select * from Log_main
select * from Log_record
go--删除测试
drop table 表A,Log_main,Log_record,operator/*--测试结果编号 修改人 表名 动作 时间
-------- ---------- ----- ----- ------------------------
1 admin 表A 新增 2004-08-05 21:17:50.257
2 admin 表A 新增 2004-08-05 21:17:50.277
3 admin 表A 修改 2004-08-05 21:17:51.410
4 我 表A 删除 2004-08-05 21:17:51.490(所影响的行数为 4 行)编号 字段 修改前值 修改后值
----------- ------ ------------ ------------
1 ID 1 NULL
1 NAME CHRI NULL
1 AGE 21 NULL
1 SEX 1 NULL
2 ID 2 NULL
2 ID 3 NULL
2 NAME AAAA NULL
2 NAME BBBB NULL
2 AGE 22 NULL
2 AGE 23 NULL
2 SEX 0 NULL
2 SEX 1 NULL
3 AGE 22 28
3 SEX 0 0
4 ID NULL 3
4 NAME NULL BBBB
4 AGE NULL 23
4 SEX NULL 1(所影响的行数为 18 行)
--*/