分布式存储过程报错

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
...全文
56 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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 装的是开发人员版
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2008-02-28 05:24
社区公告
暂无公告