在触发器中修改链接服务器的数据为什么出错?

lucklion 2003-11-20 04:40:59
在ms-sql server上作了一个oracle链接服务器。在查询分析器里执行update语句成功。
但在sql server的一个表作了触发器,当一个字段值改变时对同一oracle链接服务器的表执行update操作,总失败,返回错误:

服务器: 消息 7391,级别 16,状态 1,过程 proc_userlist_modpsw,行 14
该操作未能执行,因为 OLE DB 提供程序 'MSDAORA' 无法启动分布式事务。

在帮助上说:
验证指定的 OLE DB 提供程序是否支持分布式事务。如果提供程序不支持分布式事务,则将数据修改语句重写为不使用分布式事务。

但怎样才能“将数据修改语句重写为不使用分布式事务”
谢谢各位。
...全文
30 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lucklion 2003-11-20
  • 打赏
  • 举报
回复
TO txlicenhe(马可)
我本地的数据库SQL SERVER已启动了DTC,但链接服务器是ORACLE哪里有这项服务.

TO pengdali(大力 V3.0)
我把触发器中的关键部分放在一个存储过程中早就就试过了,不行啊,想想也是,多套了一层,不还是一个事物吗。

哎,刚在看了论坛里有好多人也有这样的问题,但解决的不多阿,何况我的链接服务器还是ORACLE.
pengdali 2003-11-20
  • 打赏
  • 举报
回复
改用存储过程吧。
txlicenhe 2003-11-20
  • 打赏
  • 举报
回复

分布式事务:
两边启动dtc

set XACT_ABORT on
set ANSI_NULL_DFLT_ON on
set ANSI_WARNINGS on

BEGIN DISTRIBUTED TRANSACTION
select * from OPENDATASOURCE('MSDASQL','DRIVER={SQL Server};SERVER=ip;UID=sa;PWD=密码;').pubs.dbo.jobs
commit tran


select * into 本地库名..表名 from OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名

insert 本地库名..表名 select * from OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名
txlicenhe 2003-11-20
  • 打赏
  • 举报
回复
触发器本身是事务,修改连接服务器上的数据就成了分布式事务。

34,874

社区成员

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

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