CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

关于HOST_NAME()的超级怪问题!请专家赐教!急

楼主moyanwuhen()2006-08-04 13:59:42 在 MS-SQL Server / 疑难问题 提问

我写了一个触发器:  
  CREATE   TRIGGER   td_cw_tax   ON   [dbo].[cw_tax]    
  FOR   DELETE    
  AS  
      INSERT   INTO   user_handle_history      
                    (  
                        handle_type,        
                        table_code,        
                        data_id,        
                        data_name,        
                        data_property,        
                        workstation,        
                        logon_name,        
                        handle_date   )      
      SELECT        
                        '删除',        
                        'cw_tax',        
                        deleted.id,        
                        deleted.name,        
                        convert(varchar(50),deleted.result   ),        
                        HOST_NAME(),        
                        system_user,        
                        getdate()    
      FROM   deleted   ;  
   
  HOST_NAME(),就是得不到值!为什么?我把代码放在查询分析器就得到HOST_NAME()的值且能插入到此表,而且在触发器里所有的HOST_ID()之类的系统函数都能得到值,就唯此得不到,为什么这么怪?  
   
  附:  
  CREATE   TABLE   [dbo].[user_handle_history]   (  
  [handle_id]   [bigint]   IDENTITY   (1,   1)   NOT   NULL   ,  
  [handle_type]   [varchar]   (10)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [table_code]   [varchar]   (50)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [data_id]   [char]   (15)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [data_name]   [varchar]   (50)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [data_property]   [varchar]   (50)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [workstation]   [varchar]   (128)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [logon_name]   [varchar]   (15)   COLLATE   Chinese_PRC_CI_AS   NULL   ,  
  [handle_date]   [datetime]   NULL    
  )   ON   [PRIMARY]  
   
  我该怎么办?  
  问题点数:20、回复次数:22Top

1 楼gsh945(太平洋底)回复于 2006-08-04 14:44:36 得分 1

顶一个Top

2 楼moyanwuhen()回复于 2006-08-04 14:51:00 得分 0

大哥,我要解决方案,要在触发器里得到客户机的名字,怎么办??高手出招呀!斑主,快来救吾Top

3 楼moyanwuhen()回复于 2006-08-04 15:26:00 得分 0

有没有人知道?在线等呀!请问专家们都同时出去了吗?Top

4 楼Haiwer(海阔天空)回复于 2006-08-04 15:29:18 得分 2

HOST_NAME  
  USER_NAME  
  SUSER_NAME            
  SUSER_SNAME    
  这几个函数确实比较难确定  
   
  不过如果是在有域的局域网内,都能正常,其他的好像不一定  
  Top

5 楼Haiwer(海阔天空)回复于 2006-08-04 15:29:53 得分 0

你能改变网络的结构吗?  
  Top

6 楼moyanwuhen()回复于 2006-08-04 15:36:21 得分 0

可是system_user,getdate(),host_id()在触发器里都能获得,为什么单单就host_name得不到?可我需要这样做,有什么解决办法?我就是要在服务器的数据库里记录客户端的机器名呀!求~~~~Top

7 楼realgz(realgz)回复于 2006-08-04 15:36:57 得分 0

既然如此为什么不根据spid自己到   sysprocesses   去取?Top

8 楼moyanwuhen()回复于 2006-08-04 15:39:41 得分 0

机子全是一个局域网上的,该语句目的就是记录用户操作数据库的情况,如谁删了什么,谁改了什么资料等~~,我要用触发器获得用户信息,而且只能用触发UPDATE,DELETE,并不记录用户INSERT了什么,Top

9 楼moyanwuhen()回复于 2006-08-04 15:50:33 得分 0

那我给WORKSTATION字段付默认值:HOST_NAME()为什么也不可以?,,sysprocesses   我没用过,不知道能不能解决!去试试,希望还有别的办法,继续求~~~~~Top

10 楼moyanwuhen()回复于 2006-08-04 15:53:57 得分 0

请问怎么根据spid到   sysprocesses   去取?SPID用什么方法或函数怎么得到,没用过,不知道哦Top

11 楼realgz(realgz)回复于 2006-08-04 16:05:27 得分 2

select   hostname     from   master..sysprocesses   where   spid=@@spidTop

12 楼moyanwuhen()回复于 2006-08-04 16:10:08 得分 0

可以没法用到下面的结构里呀!  
  INSERT   INTO   user_handle_history  
  (  
  handle_type,  
  table_code,  
  data_id,  
  data_name,  
  data_property,  
  workstation,  
  logon_name,  
  handle_date   )  
  SELECT  
  '删除',  
  'cw_tax',  
  deleted.id,  
  deleted.name,  
  convert(varchar(50),deleted.result   ),  
  HOST_NAME(),  
  system_user,  
  getdate()  
  FROM   deleted   ;  
   
  求救,谢~~~~~谢~~~~~~Top

13 楼realgz(realgz)回复于 2006-08-04 16:15:23 得分 2

子查询可以啊..汗  
  Top

14 楼moyanwuhen()回复于 2006-08-04 16:17:37 得分 0

不会哦~本来触发器就不大会写,呵呵~我去查查怎么写~哎~这个问题搞了一天,Top

15 楼moyanwuhen()回复于 2006-08-04 16:31:46 得分 0

可恶的SQLSERVER2000,还是不行,  
  我写的代码如下:  
   
  CREATE   TRIGGER   tu_cw_tax_history   ON   [dbo].[cw_tax]    
  FOR   UPDATE  
  AS  
   
  declare   @host   as   nchar(30)  
   
  select   @host   =   hostname   from   master..sysprocesses   where   spid=@@spid  
   
      INSERT   INTO   user_handle_history      
                    (  
                        handle_type,        
                        table_code,        
                        data_id,        
                        data_name,        
                        data_property,  
                        workstation   )      
      SELECT        
                        '修改',        
                        'cw_tax',        
                        deleted.id,        
                        deleted.name,        
                      convert(varchar(50),deleted.result   ),  
                      @host  
      FROM   deleted   ;    
   
  还是没获得,是不是触发器根本就得不到????上面的代码查询分析器可以得到其值.郁闷~~~~~~Top

16 楼moyanwuhen()回复于 2006-08-04 17:09:39 得分 0

各位专家,我得到结论:触发器里永远得不到HOST_NAME(),@@SPID也没用!不信可试试~~~~~!~Top

17 楼Haiwer(海阔天空)回复于 2006-08-04 17:55:49 得分 2

有没有换台客户端试试  
   
  Top

18 楼moyanwuhen()回复于 2006-08-04 18:14:36 得分 0

难道你们的机子触发器里可以得到此值???Top

19 楼hellowork(一两清风)回复于 2006-08-04 18:21:05 得分 5

我的机器是正常的.  
  请楼主把触发器改成这个样子,然后在查询分析器中执行update语句,看看能否打印出hostname值.  
  CREATE   TRIGGER   tu_cw_tax_history   ON   [dbo].[cw_tax]    
  FOR   UPDATE  
  AS  
  print   host_name()  
  declare   @host   as   nchar(30)  
  select   @host   =   hostname   from   master..sysprocesses   where   spid=@@spid  
  print   @host  
  GO  
  ----在另一个连接中测试,查看打印的结果  
  update   cw_tax   set   .....Top

20 楼zxkid(如果你有勇气迈出第一步,未来又能糟糕成什么样呢?)回复于 2006-08-04 18:38:24 得分 2

把workstation的defaultvalue设为HOST_NAME()试试Top

21 楼hjmaAsC(继续补丁)回复于 2006-08-04 19:17:05 得分 2

SERVERPROPERTY('ServerName')Top

22 楼drk928(一起看斜阳)回复于 2006-08-05 08:35:58 得分 2

就好像函数里不能用随机函数一样,你建一个视图然后中转一下嘛.Top

相关问题

关键词

得分解答快速导航

  • 帖主:moyanwuhen
  • gsh945
  • Haiwer
  • realgz
  • realgz
  • Haiwer
  • hellowork
  • zxkid
  • hjmaAsC
  • drk928

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo