分布式存储过程报错

cqhydz 2008-02-28 05:24:24
有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
...全文
105 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cqhydz 2008-02-29
  • 打赏
  • 举报
回复
找了一下以前的贴子,基本解决了,
-狙击手- 2008-02-28
  • 打赏
  • 举报
回复
1、 EXEC sp_addlinkedserver
2、 EXEC sp_addlinkedsrvlogin
-狙击手- 2008-02-28
  • 打赏
  • 举报
回复
不能从用户定义的事务中执行 sp_addlinkedsrvlogin。
chengqscjh 2008-02-28
  • 打赏
  • 举报
回复
mark and up
pt1314917 2008-02-28
  • 打赏
  • 举报
回复
帮顶
wzy_love_sly 2008-02-28
  • 打赏
  • 举报
回复
帮顶
cqhydz 2008-02-28
  • 打赏
  • 举报
回复
说一下环境
一个局域网内
A win2003 服务器版
B win2000p 装的是开发人员版

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧