关于SQL中通过链接服务器执行分布式事务过程时只能查询不能执行insert update delete等操作

andylist 2011-03-26 10:32:37
关于SQL中通过链接服务器执行分布式事务过程时只能查询不能执行insert update delete等操作,请问如何解决此问题,谢谢!
两台安装了SQL2005EXPRESS的服务器,远过互联网访问.
客户机可以成功执行下面的存储过程
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER PROC [dbo].[update_spzl]
AS
BEGIN
set xact_abort ON
BEGIN TRANSACTION

if exists (select * from sysobjects where name = 'spzl') drop table spzl
if exists (select * from sysobjects where name = 'usertable') drop table usertable
if exists (select * from sysobjects where name = 'syspara') drop table syspara
if exists (select * from sysobjects where name = 'stock') drop table stock
if exists (select * from sysobjects where name = 'report') drop table report
if exists (select * from sysobjects where name = 'ckzl') drop table ckzl
if exists (select * from sysobjects where name = 'dabaodetail') drop table dabaodetail

SELECT * INTO stock FROM hst.WQJXC.dbo.stock
SELECT * INTO spzl FROM hst.WQJXC.dbo.SPZL
SELECT * INTO UserTable FROM hst.WQJXC.dbo.UserTable
SELECT * INTO syspara FROM hst.WQJXC.dbo.syspara
SELECT * INTO report FROM hst.WQJXC.dbo.report
SELECT * INTO ckzl FROM hst.WQJXC.dbo.ckzl
SELECT * INTO dabaodetail FROM hst.WQJXC.dbo.dabaodetail

UPDATE LUT SET LastUpdateTime = (GETDATE())

COMMIT TRANSACTION

END

但是这一条存储过程却执行不了:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER PROC [dbo].[upload_sale]
AS
BEGIN
set XACT_ABORT on
BEGIN TRANSACTION
INSERT INTO hst.wqjxc.dbo.SaleMaster_Temp (dh,xstime,xsdate,syyid,yyyid,shoukuan,zhaohui,shuaka,yingshou,shishou,youhui,ckid,vipid,js)
SELECT dh,xstime,xsdate,syyid,yyyid,shoukuan,zhaohui,shuaka,yingshou,shishou,youhui,ckid,vipid,js
FROM SaleMaster_Temp
WHERE upload = 0

UPDATE SaleMaster_Temp SET upload = 1 WHERE upload = 0

INSERT INTO hst.wqjxc.dbo.SaleDetail_Temp (dh,bm,sl,jj,spsj,sjsj,ysxj,sjxj,zkl,yyyid)
SELECT dh,bm,sl,jj,spsj,sjsj,ysxj,sjxj,zkl,yyyid
FROM SaleDetail_Temp
WHERE upload = 0

UPDATE SaleDetail_Temp SET upload = 1 WHERE upload = 0

COMMIT TRANSACTION
END
提示错误如下:
链接服务器"bwq"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "没有活动事务。"。
消息 7391,级别 16,状态 2,过程 upload_sale2,第 8 行
无法执行该操作,因为链接服务器 "bwq" 的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务。

两台电脑都已开启MSDTC服务,135端口也没有被任何程序占用,不然第一条又怎会成功执行呢.
请高手指教.
两台机都是安装了XP SP3 ,SQL2005的版本也是一样的.










...全文
420 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyc880813 2011-03-31
  • 打赏
  • 举报
回复
链接式服务器 是不是本身就是一个事务?
抱着个错误的原因可能是事务中不允许再次嵌入事务
woshile 2011-03-29
  • 打赏
  • 举报
回复
为何没人回答?我也在为这个而烦恼.
andylist 2011-03-28
  • 打赏
  • 举报
回复
版主呢?帮帮我啊。
Q315054403 2011-03-27
  • 打赏
  • 举报
回复
安装和启用MSDTC
andylist 2011-03-27
  • 打赏
  • 举报
回复
楼上的,你的贴子我看过了,跟着做不管用。
不知是不是那里的权限设置问题,第一条已可以成功执行,且无论执行多少次都可以。
就是第二条不知是什么原因提示出错。
xuxubaby 2011-03-27
  • 打赏
  • 举报
回复
http://blog.163.com/lpw_email/blog/static/962543292010626113041578/
andylist 2011-03-27
  • 打赏
  • 举报
回复
请大侠们帮帮我
andylist 2011-03-27
  • 打赏
  • 举报
回复
如果把
BEGIN TRANSACTION

COMMIT TRANSACTION
去掉的话,可以执行,但是这样的话就无法保证数据的完整了
因为这远程的,
万一数据多的话,传到一半网络终断的话就麻烦了。
andylist 2011-03-27
  • 打赏
  • 举报
回复
已经启用了!
andylist 2011-03-26
  • 打赏
  • 举报
回复
我是用SA来登陆的 两台服务器的用户名和密码都是一样的
andylist 2011-03-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ssp2009 的回复:]
写一条简单的insert也不行吗?有没有多数据库写操作的权限啊
[/Quote]
一条也不行
多数据库写操作的权限在那弄?
rucypli 2011-03-26
  • 打赏
  • 举报
回复
select name from sys.servers where serverid=0
看name是否和你的机器名一样

如果不一样,调用sp_dropserver,sp_addserver更改这个目录试图里的name
快溜 2011-03-26
  • 打赏
  • 举报
回复
写一条简单的insert也不行吗?有没有多数据库写操作的权限啊

34,587

社区成员

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

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