解决方案 »

  1.   

    用游标一条一条的插的话,可以用@@ROWCOUNT>0来判断影响行数的。另外你这个有时候能插入成功是因为你事务并没有完全回滚在事务前面加上SET XACT_ABORT ON 试试。
      

  2.   

    使用事务也会这样吗SET XACT_ABORT ON 
      

  3.   

    谢谢fredrickhu的回复, 也谢谢lizhongheng.
    @@ROWCOUNT提醒我了, 之前都没想过用这个, 
    刚试了下, 即使是链接服务器, 用@@ROWCOUNT>0来判断也是可以的.另外我不能使用事务, 可能是分布式事务的关系, 我在insert或delete一行时使用事务时会锁整个表.
      

  4.   

    本帖最后由 wufeng4552 于 2014-04-01 15:24:04 编辑
      

  5.   

    使用分布式事务
    insert 或者delete时锁定整个表 是由于你使用游标的造成的
    是否可以不使用游标 非用游标不可?

    建议不要在游标中向链接服务器插数据,而是在本地建临时表,游标循环插入完成后,再从临时表插入链接服务器
      

  6.   

    哦, 原来是这样啊. 
    是这样的, 我是从临时表插到远程目标表, 为了不一次性插入太多的数据, 且插入成功后就把已经插入过的数据删除, 所以才用了游标, 如果不用游标的话, 那该怎么做好点?难道我要建立2张临时表, td_data_send1、td_data_send2,
    先把 td_data_send1中的一定数量的数据导到td_data_send2, 
    然后将td_data_send2的数据插入到远程目标表, 
    如果成功, 则同时删除 td_data_send1和td_data_send2这部分数据?
      

  7.   

    每次处理的数据量如果不是很大
    试试这样
    delete from 本地表
    output deleted.* into 远程表
    where 条件