有个登录系统的用户表,想记录每个用户登陆和退出系统的时间。用户表 表名:授权1 编号 varchar 50 1
0 姓名 varchar 50 1
0 口令 varchar 50 1
0 权限 varchar 1000 1
0 id int 4 0
0 WorkAt varchar 50 1workat  表示登陆机器名,退出时清除。登陆记录表表名:授权_登录记录3 id int 4 0
0 lognum varchar 50 1
0 logname varchar 50 1
0 workat varchar 50 1
0 logindate datetime 8 1
0 logoutdate datetime 8 1
用户登陆后,通过  授权表 中的 workat字段触发,写入一条登陆记录。退出的时候更新  logoutdate 字段。

解决方案 »

  1.   

    当授权表中的workat字段更新时,触发写入登陆记录,更新logoutdate?
      

  2.   

    猜一个CREATE TRIGGER tt ON 授权
           FOR UPDATE
    AS
    BEGIN
      IF UPDATE(WorkAt) 
         BEGIN 
               IF EXISTS ( SELECT 1
                           FROM   INSERTED
                           WHERE  WorkAt != '' )--假设更新为空是退出
                  INSERT  INTO 授权_登录记录
                          SELECT  编号, 姓名, WorkAt, GETDATE()
                          FROM    INSERTED 
               ELSE 
                  UPDATE  授权_登录记录
                  SET     logoutdate = GETDATE()
                  FROM    授权_登录记录 AS a ,
                          INSERTED i
                  WHERE   a.编号 = i.编号
         END 
    END 
      

  3.   


    create trigger trigger_workat
    on [用户表]
    after update
    as
    if update(workat)
    begin
     if inserted.workat<>''
       插入记录到[用户登陆表]
     else
       更新[用户登陆表]的logoutdate字段
    end
      

  4.   


    --需要考虑登陆记录表同一用户有多条记录的情况,如果有logindate及logoutdate的应不处理
    create trigger tri_授权  ON 授权
     FOR UPDATE
    as
    begin
    --登陆处理
    if update(WorkAt) and exists(select 1 from inserted where WorkAt <> '')
    begin
    insert into 授权_登录记录(lognum,logname,workat,logindate,logoutdate)
    select 编号,姓名,WorkAt,getdate(),null
    from inserted 
    where WorkAt <> ''
    end
    --限出处理(设workat='')
    if update(WorkAt) and exists(select 1 from inserted where WorkAt = '')
    begin
    update 授权_登录记录
    set logoutdate = getdate()
    from inserted,deleted 
    where inserted.id = deleted.id
    and inserted.WorkAt <> deleted.WorkAt
    and inserted.WorkAt = ''
    and 授权_登录记录.WorkAt = deleted.WorkAt
    and 授权_登录记录.logoutdate is null
    end

    end