CREATE trigger [dbo].[tr_user_insert] on [dbo].[user]
for insert
asset  XACT_ABORT onBEGIN DISTRIBUTED TRANSACTIONdelete from mainserver.[WebData].dbo.user where id in (select id from inserted)insert into mainserver.[WebData].dbo.user select * from insertedif @@error<>0   rollback transaction 
commit tran上面就是user表的触发器,当对本机的user表插入数据时,在mainserver上可以监视到会执行一个"select * from user"的语句,虽然执行成功了,数据也更新了,但这样会在两台电脑之前产生很大的流量,请问是哪里的问题产生的??可以确认两台服务器之间无其它任何软件会产生流量,而且只有有这个触发器才会使用链接服务器。

解决方案 »

  1.   

    确定是这个触发器引起的?从语句上看不出来回执行 elect * from user
      

  2.   

    BEGIN DISTRIBUTED TRANSACTION
    为什么要在触发器里用呢,不明白,事务的开始为什么会在触发器里呢,是否应该去掉
      

  3.   


    流量肯定有的,可以插入一条很简单的数据,100M的局域网,会产生70%的流量,这正常吗?我的意思是,应该是哪里产生“select * from user”这个语句才生产的巨大的流量,现在要找到问题的根源。
      

  4.   

    跟踪了,但只找到一句“sp_opencursor”开头的,后面跟的有select * from user,这句,但是从哪里来的,看不到
      

  5.   

    没有使用游标,更不知道sp_opencursor这个是那里来的而且mainserver这台上的数据库,根本没有其它用户在访问。也没有其它触发器
      

  6.   

    这倒是怪事一件。http://support.microsoft.com/kb/286359/zh-cn看有米有用
      

  7.   

    delete from mainserver.[WebData].dbo.user where id in (select id from inserted)
    会产生select语句
      

  8.   

    insert into mainserver.[WebData].dbo.user select * from inserted应该是这里吧,晕
      

  9.   


    请问这个会产生select * from 语句吗?
      

  10.   

    触发器这句select * from inserted会产生USERS表查询
      

  11.   


    已经确定是这句产生的,换成
    delete from mainserver.[WebData].dbo.user where id=@id
    就可以了,但这种在进行批量插入时,比如SqlBulkCopy,会不会受影响,因为上面只是处理了inserted只有一条数据,在进行SqlBulkCopy操作时,inserted表会有几条数据?
      

  12.   


    改成这样试试,不用in 
    delete a 
    from mainserver.[WebData].dbo.user a ,
    inserted b
    where a.id=b.id