建立了如下的存储过程
create     procedure pr_qrebateamou as
--每个季度的第一天获取优惠绑定的信息
begin
    --if substring(convert(varchar(10),getdate(),121),9,2) = '01' and substring(convert(varchar(10),getdate(),121),6,2) in ('01','04','07','10') 
    --begin
         begin tran t1
         --删除本季度内的数据
         delete from qrebateamou
         --从一卡通信息中读入信息
         insert into qrebateamou 
         select 
   houseidno,
   sum(
   case grdid
     when 1000 then 1
     when null then 1
     when 0    then 1
     else       2
   end) as amount,
               null
from 
   [10.11.0.24].ecarddb24.dbo.VW_HrmsEmp
        group by houseidno
        commit tran t1
    --end
end在查询分析器中单独运行
insert into qrebateamou 
         select 
   houseidno,
   sum(
   case grdid
     when 1000 then 1
     when null then 1
     when 0    then 1
     else       2
   end) as amount,
               null
from 
   [10.11.0.24].ecarddb24.dbo.VW_HrmsEmp
        group by houseidno
提示没有任何问题,但如果执行存储过程,出现如下提示:
服务器: 消息 7391,级别 16,状态 1,过程 pr_qrebateamou,行 28
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。注意:两台机器的MSDTC服务都已经启动,组件服务中的网络DTC访问,以及启用XA事务 都已选上,端口135已经打开,为什么

解决方案 »

  1.   

    注意:两台机器系统配置为WINDOWS XP SP2,SQL2000 SP4
      

  2.   

    另外我也参考了http://www.cnblogs.com/chnking/archive/2007/04/04/699891.html上面说的解决办法,但问题依旧,盼望高手指导啊
      

  3.   

    分布式事务提交好像要用begin distributed tran开始
      

  4.   

    你的 begin tran t1 前面好像没有 SET XACT_ABORT ON 吧加上去
    SET XACT_ABORT ON 
    begin tran t1 
    ....