Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1267339
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2009-05-12 16:04:35



有两个表,  
  Table1:   LoginoutInfo     --记录系统管理员进出时的时间,当然,用“结束任务”  
  的方法关闭程序是记录不到的,会只有Login,而没有Logout。  
  LoginoutInfo(user(char(20)),LogTime(DateTime),LogStatus(char(10)))  
  记录是这样的:  
  admin     2006-12-15   10:25:36       login  
  admin     2006-12-15   10:55:36       logout  
  admin     2006-12-15   10:59:10       login     --这里被结束任务,所以没有logout  
  user1     2006-12-15   11:09:20       login  
  user1     2006-12-15   11:15:11       logout  
  ......  
   
  Table2:   EventLogInfo  
  --记录管理员在系统里所有的操作  
  EventLogInfo(EvtTime(DateTime),EvtContent(nvarchar(100)))  
  记录是这样的:  
  2006-12-12   10:26:07         Delete   a   record  
  2006-12-12   10:26:12         add   a   record  
  2006-12-12   11:01:07         backup   database  
  2006-12-12   11:10:54         Delete   a   user  
  ....  
   
  我想得到这样的结果(其实就是把这些操作是谁做的加在描述后面):  
  2006-12-12   10:26:07         Delete   a   record   By   admin  
  2006-12-12   10:26:12         add   a   record   By   admin  
  2006-12-12   11:01:07         backup   database   By   admin  
  2006-12-12   11:10:54         Delete   a   user   By   user1  
  ....  
   
  请问,这样的语句如何写?  
  多谢了,很急,

delphi社区人气真的不行了!!

一次只能有一个管理员登陆

建议将表EventLogInfo增加一个用户字段来记录登陆的用户。  
  insert   into   EventLogInfo   values(.....Sql语句一样的写  
  Parambyname('EvtTime').value   :=   now;  
  parambyname('EvtContent').value   :=   '动作‘+’用户‘;

create   table   #LoginoutInfo(logNo   char(20),LogTime   DateTime,LogStatus   char(10))  
  insert   into   #LoginoutInfo  
  select   'admin','2006-12-15   10:25:36','login'  
  union   all   select   'admin','2006-12-15   10:55:36','logout'  
  union   all   select   'admin','2006-12-15   10:59:10','login'    
  union   all   select   'user1','2006-12-15   11:09:20','login'  
  union   all   select   'user1','2006-12-15   11:15:11','logout'  
   
  create   table   #event(EvtTime   DateTime,EvtContent   nvarchar(100))  
   
  insert   into   #event  
  select   '2006-12-12   10:26:07',   'Delete   a   record'  
  union   all   select   '2006-12-12   10:26:12',   'add   a   record'  
  union   all   select   '2006-12-12   11:01:07',   'backup   database'  
  union   all   select   '2006-12-12   11:10:54',   'Delete   a   user'  
  表帮大家建好了,

liaosummer  
   
  我明白您的意思,您的意思是说在记录eventlog的时候直接把操作人带上?  
  是的,  
  但是现在时间不允许了,  
  客户赶着要货,所以打算先用语句搞定,然后再改这里!!  
  特别多谢各位。。。  
 

不知道楼主的意思是不是说,要找出EventLogInfo.EvtTime在LoginoutInfo.LogTime之内的记录还是怎样.这两个应该要有一定的关联的吧??  
 

你都记下了是谁登陆的,记录动作的时候直接+用户名不就完了?  
  设个全局变量UserName  
 

着急还走弯路。。。

没救啦

select   a.Evttime,a.Evtcontent,b.user   from   table2   a     left     join   table1   b     on   b.logtime   <   a.evtime   order   by     b.logtime   desc     取小于当前操作时间中的最晚时间处所登陆的管理员用户  
  不过,上面的几个大侠都说了最好在table2中添加   User记录  
  注:随手写的没测试!

select   top   1   a.Evttime,a.Evtcontent,b.user   from   table2   a     left     join   table1   b     on   b.logtime   <   a.evtime   order   by     b.logtime   desc        
  忘了top1     [sql   server]



--------------------------
新闻:微软触控平台Surface SP1发布
网站导航: 博客园首页  新闻  .NET频道  社区  博问  闪存  找找看
阅读(372) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~