有个登录系统的用户表,想记录每个用户登陆和退出系统的时间。用户表 表名:授权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 字段。
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 字段。
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
create trigger trigger_workat
on [用户表]
after update
as
if update(workat)
begin
if inserted.workat<>''
插入记录到[用户登陆表]
else
更新[用户登陆表]的logoutdate字段
end
--需要考虑登陆记录表同一用户有多条记录的情况,如果有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