日期:2014-05-18  浏览次数:20528 次

SQL 2005触发器的问题。请高手帮忙!很急!
有个ERP系统,操作数据库的表,在往表插入数据的时候,做了个触发器,往另外一张表写数据。

触发器是这样写的:
ALTER TRIGGER [ST].TRIG_TABLE1_LOG_INSERT
  ON [ST].TABLE1_TMP
  AFTER INSERT
AS 
BEGIN
  declare @HOSTNAME varchar(50)
  declare @NETADDRESS varchar(50)
  declare @LOGINNAME varchar(50)
  declare @LOGINTIME varchar(32)
  declare @spid varchar(32)

  SET NOCOUNT ON;
  set @spid = (select @@spid) 
  set @HOSTNAME = (select distinct hostname from master..sysprocesses where spid = @spid)
  set @NETADDRESS = (select distinct net_address from master..sysprocesses where spid = @spid)
  set @LOGINNAME = (select distinct loginame from master..sysprocesses where spid = @spid)
  set @LOGINTIME = (select distinct login_time from master..sysprocesses where spid = @spid)

  insert into TAB_LOG
  (
  HOST_NAME,
  NET_ADDRESS,
  LOGIN_NAME,
  LOGIN_TIME,
  TABLE_NAME,
  OPERATE_TPYE
  )
  VALUES (
  @HOSTNAME,
  @NETADDRESS,
  @LOGINNAME,
  @LOGINTIME,
  '[ST].TABLE1_TMP,
  'INSERT'
  )

END
GO

现在在ERP系统中往TABLE1_TMP插入数据的时候(批量导入多行数据),插入不进去。总是回滚。
下面是trace里面的信息
SQL:BatchStarting rollback tran
ST 2736 61 2012-06-08 14:01:18.160
SQL:BatchCompleted rollback tran
ST 0 0 0 0 2736 61 2012-06-08 14:01:18.160 2012-06-08 14:01:18.160


------解决方案--------------------
ERP程序批量导入的时候是不是有什么事务控制的语句,看看逻辑是不是有什么问题,你的触发器我试过了没什么问题,在SQL Server端批量导入也没什么问题。但是导入的数据量大的时候触发器很占资源可能会导致超时从而回滚事务的。
------解决方案--------------------
探讨

谢谢各位大侠。是我的原因,触发器插入的那个表不在同一个用户下,可能是权限问题。现在已经可以插入数据了。再次感谢!