有个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端批量导入也没什么问题。但是导入的数据量大的时候触发器很占资源可能会导致超时从而回滚事务的。
------解决方案--------------------