找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 3436|回复: 1

[数据库知识] 用触发器实现用户登录记录下登录信息

[复制链接]
发表于 2008-10-24 21:19:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

×
用触发器实现用户登录记录下登录信息(sysprocesses)
如果你非要用触发器,不妨看看select * from sysprocesses的内容。可以给sysprocesses表加个触发器来完成你的要求。如果你用7.0,可以看看Microsoft提供的sp_who的过程!如下:
create procedure sp_who  --- 1995/11/28 15:48
       @loginame sysname = NULL --or 'active'
as

declare     @spidlow    int,
         @spidhigh    int,
         @spid        int,
         @sid        varbinary(85)

select     @spidlow    =     0
        ,@spidhigh    = 32767


if (    @loginame is not NULL
   AND    upper(@loginame) = 'ACTIVE'
   )
    begin

    select spid ,status
              ,loginame=rtrim(loginame)
          ,hostname ,blk=convert(char(5),blocked)
          ,dbname= db_name(dbid),cmd
    from  master.dbo.sysprocesses
    where spid >= @spidlow and spid <= @spidhigh AND
          upper(cmd) <> 'AWAITING COMMAND'

    return (0)
    end

if (@loginame is not NULL
   AND    upper(@loginame) <> 'ACTIVE'
   )
begin
    if (@loginame like '[0-9]%')    -- is a spid.
    begin
        select @spid = convert(int, @loginame)
        select spid, status,
               loginame=rtrim(loginame),
               hostname,blk = convert(char(5),blocked),
               dbname=db_name(dbid),
               cmd
        from  master.dbo.sysprocesses
        where spid = @spid
    end
    else
    begin
        select @sid = suser_sid(@loginame)
        if (@sid is null)
        begin
            raiserror(15007,-1,-1,@loginame)
            return (1)
        end        
        select spid, status,
               loginame=rtrim(loginame),
               hostname ,blk=convert(char(5),blocked),
               dbname=db_name(dbid),
               cmd
        from  master.dbo.sysprocesses
        where sid = @sid
    end
    return (0)
end


/* loginame arg is null */
select spid,
       status,
       loginame=rtrim(loginame),
       hostname,
       blk=convert(char(5),blocked),
       dbname=db_name(dbid),
       cmd
from  master.dbo.sysprocesses
where spid >= @spidlow and spid <= @spidhigh


return (0) -- sp_who
发表于 2012-9-8 15:36:42 | 显示全部楼层
看不懂,这么复杂!
回复 点赞 拍砖

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-11-27 08:38 , Processed in 0.038136 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表