如题,我想监视一个表的修改记录,记下修改时间,修改主机名,修改了哪些数据,想在这个表中写个触发器,通过触发器实现,但不知道如何在触发器中获取客户端的主机名,请高手赐教,谢谢!!

解决方案 »

  1.   

    不知道 host_name()可不可以?
      

  2.   

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetClientIP]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
    drop procedure [dbo].[GetClientIP]
    GO
    /********************************************************
    功能:获取当前客户端IP地址
    ********************************************************/
    /*调用过程:
    exec GetClientIP
    */
    Create Procedure GetClientIP
    as
    declare @ip varchar(20)
    declare @hst varchar(20)
    declare @sql varchar(100)
    declare @str varchar(100)
    set @str='PING '+Host_Name() + ' -n 1'
    create table #tmp(aa varchar(200))
    insert #tmp exec master..xp_cmdshell @str
    select top 1 @ip = replace(left(aa,charindex(':',aa)-1),'Reply from ','') 
    from #tmp where aa like 'reply from %:%'
    drop table #tmp
    select @ip
    return (0)
    Go 
    EXEC GetClientIP
    /*                     
    -------------------- 
    192.168.12.115
    */