情况如下:
在同个域中有两台SqlServer2000 服务器 操作系统分别是win advaced server和xp
在xp的分析查询器里面添加远程sqlserver
EXEC sp_addlinkedserver
@server = 'srv_lnk', --链接服务器名
@srvproduct = '',
@provider='MSDASQL',
@datasrc='bqcws' --连接DSN名
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa','sa'然后开始事务
set  XACT_ABORT on
set ANSI_NULL_DFLT_ON on
set ANSI_WARNINGS on BEGIN DISTRIBUTED TRANSACTION
--逻辑部分
delete  from srv_lnk.Shop.dbo.Shop_ReturnOrderID
select * from srv_lnk.Shop.dbo.Shop_ReturnOrderID
........
............
if @@error !=0 
  begin 
    ROLLBACK TRANSACTION 
    return
  endCOMMIT TRANSACTION出现如下情况,如果仅仅对读srv_lnk远程数据库的表和读写本地数据是没有问题的
,当要对远程数据库的表进行修改删除时就会提示错误Server: Msg 8524, Level 16, State 1, Line 141
The current transaction could not be exported to the remote provider. It has been rolled back.感觉很奇怪,既然代码在分布式事务里面就应该有权限对远程表进行修改权限。希望高手指点

解决方案 »

  1.   

    1、运行 regedt32,浏览至 HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC。
    添加一个 DWORD 值 TurnOffRpcSecurity,值数据为 1。
    2、重启MS DTC服务。
    3、打开“管理工具”的“组件服务”。
        a.  浏览至"启动管理工具"。 
        b.  选择"组件服务"。 
        c.  展开"组件服务"树,然后展开"我的电脑"。 
        d.  右键单击"我的电脑",然后选择"属性"。 
          在 MSDTC 选项卡中,确保选中了下列选项: 
    网络 DTC 访问
    网络管理
    网络事务
    XA 事务
    另外,"DTC 登录帐户"一定要设置为"NT Authority\NetworkService"。 
    4、重启MS DTC服务。
    5、再次运行 regedt32,浏览至 HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC,然后删除 TurnOffRpcSecurity 项。