有AB两个服务器以下是A服务器一个存储过程,主要功能是向B服务器中表写一条记录,第一个在查询管理器中执行正常,但第二个加上事务后则会报错,这种需要加事务的应如何解决呢
服务器: 消息 15002,级别 16,状态 1,过程 sp_addlinkedsrvlogin,行 17
不能在事务内部执行过程 'sp_addlinkedsrvlogin'。
服务器: 消息 7391,级别 16,状态 1,过程 T_save1,行 16
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。CREATE Procedure  T_save1
(
   @phid  varchar(20),
    @datestr varchar(20),
    @txt varchar(10))AS    declare @tempstr varchar(30)
  set @tempstr='你的激活码'+@txt
  EXEC sp_addlinkedsrvlogin 'SMS','false',null,'sa','123qweasdzxc' 
  INSERT INTO SMS.SMSInfo.dbo.SendSms (CellPhone,CText,Cdate,Ctime,SendB) VALUES (@phid,@tempstr,@datestr,'0',0) 
RETURN
GO
CREATE Procedure  T_save1
(
   @phid  varchar(20),
    @datestr varchar(20),
    @txt varchar(10))AS 
SET XACT_ABORT ON  --强制出错全部回滚
BEGIN TRAN    declare @tempstr varchar(30)
  set @tempstr='你的激活码'+@txt
  EXEC sp_addlinkedsrvlogin 'SMS','false',null,'sa','123qweasdzxc' 
  INSERT INTO SMS.SMSInfo.dbo.SendSms (CellPhone,CText,Cdate,Ctime,SendB) VALUES (@phid,@tempstr,@datestr,'0',0) --出错处理
    IF @@ERROR<>0  GOTO errhandle---->發生錯誤直接跳轉到後面,不發生錯誤提交
COMMIT TRAN

RETURN
  errhandle:
IF @@ERROR<>0
BEGIN
  ROLLBACK TRAN

END
  
RETURN
GO