日期:2014-05-19  浏览次数:20432 次

在你看来很简单,在线等给分
现在我有一个表里面有一个字段,取值很简单,1\2\3   代表人的状态.
现在有人可以在查询分析器中随意修改这些状态.
我想问如何才能在有人修改时自动由数据库在某个地方记录下是那台计算机用什么程序修改了这个字段,并且这个字段的原始值是什么?

------解决方案--------------------
无法记录“用什么程序”,修改的内容可以用触发器来记录。
------解决方案--------------------
--建立日志表
create table log(operator varchar(20),computername varchar(50),old_value varchar(10),new_value varchar(10))
go
--用触发器记录修改动作
create trigger tu_表 on 表
for update
as
if update(字段) and exists(select 1 from inserted i,deleted d where i.字段 <> d.字段)
begin
insert into log
select suser_sname(),(select top 1 hostname from master..sysprocesses where spid=@@spid),d.字段,i.字段
end

------解决方案--------------------
--建立日志表
create table log(operuser varchar(20),opertime datetime,computername varchar(50),oldvalue varchar(10),newvalue varchar(10))
go
--用触发器记录修改动作
create trigger tu_表 on 表
for update
as
if update(字段) and exists(select 1 from inserted i,deleted d where i.字段 <> d.字段)
begin
insert into log
select suser_sname(),getdate(),(select top 1 hostname from master..sysprocesses where spid=@@spid),d.字段,i.字段
end

------解决方案--------------------
其实楼主的想法不可能完全在技术上实现的

因为大家都用相同的sql server用户来登录的话,也区分不出来谁来改的

关键是要限制用户的权限,用管理上控制
------解决方案--------------------
gahade(与君共勉) 的方法可以记录一下修改的数据,但是如果数据修改比较频繁的话,你的日志会急剧增长,对数据库性能也有影响.


------解决方案--------------------
用什么程序好像不可能吧...
原始值么。可以用触发器纪录原来的值..
------解决方案--------------------
关注