SQL Server2000 ,在trigger中使用DB link

原创 2009年03月13日 11:35:00

前几天create 了一个trigger,在里面要使用到DB link去查询另一台server的资料,

本以为是很简单的事,不想去搞了几天都没解决。

DB link是早已经建好了的,并且在其他地方(如store procedure等)都正常使用。

但到了trigger里,就会报错:

 

English version:

The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction.

[OLE/DB provider returned message: New transaction cannot enlist in the specified transaction coordinator. ]

OLE DB error trace [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a].

 

中文版:

由於 OLE DB Provider 'SQLOLEDB' 無法開始分散式交易,所以無法執行此操作。
[OLE/DB provider returned message: 在指定異動協調員中無法編列新異動。]
OLE DB 錯誤追蹤 [OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。

 

头大了,没碰到过这样的问题。。。

第一时间想起csdn,

http://topic.csdn.net/u/20090312/09/1b8f2fdf-390d-4ddf-899f-005122339cea.html

得到“完美行动”的解答,估计是MSDTC的问题,

只说说自己的步骤,出问题可别找我负责啊,呵呵


开始--运行--dcomcnfg.exe
元件服务--电脑--我的电脑(右键--属性)
MSDTC --安全性设定 --然后把“网络DTC存取”勾上,把“允许远端用户端”勾上,“允许远端系统管理”勾上, 在交易管理通讯里,“允许输入”勾上,“允许输出”勾上,“不需要验证”勾上
确定后,应该是会自动启动MSDTC service (Distributed Transaction Coordinator)
重启机器后,就可以在trigger里用到db link了。。。。

没明白原理,也不知道这样勾上那些东西,是否存在安全性问题,
所以暂时没用到公司服务器上(只在个人电脑上测试,ok)。

 

另外,高升兄的一篇blog,Sql Server 2005(64位) 连接Sql Server 2000(32位),蛮详细的介绍,呵呵

http://blog.csdn.net/hb_gx/archive/2007/10/15/1826436.aspx

 

 

/** Add at 2009-3-19  DB link 在cursor中的使用**/

一支store procedure 中(SQL2000),有一段sql statement是使用到cursor,需要去查询db link的一个table(此table在SQL2005上)。

类似 declare c1 cursor for select * from DBlink.DBname.dbo.T

提示如下error message:

Statement(s) could not be prepared. [SQLSTATE 42000] (Error 8180)
Incorrect syntax near 'Tbl1001'. [SQLSTATE 42000] (Error 102)
Incorrect syntax near 'Tbl1001'. [SQLSTATE 42000] (Error 102)
Incorrect syntax near 'Tbl1001'. [SQLSTATE 42000] (Error 102)
Incorrect syntax near 'FASTFIRSTROW'. If this is intended as a part of
a table hint, A WITH keyword and parenthesis are now required. See SQL
Server Books Online for proper syntax. [SQLSTATE 42000] (Error 1018).
The step failed.


处理方式,将cursor定义成只读应该就可以了,比如加上 INSENSITIVE,如下:

declare c1 INSENSITIVE cursor  for select  * from DBlink.DBname.dbo.T

就可以跑起來了。。。

 

不过相同的语句,在SQl2005 连接SQL2000时,不用加INSENSITIVE也可以过。。。。。

以上仅供参考!

Oracle数据库和SQLServer数据库中创建DB-Link语法

1.Oracle数据库中DB-Link对象创建语法: create public database link DB_Link_Name connect to userName identified ...
  • u012411219
  • u012411219
  • 2016年05月05日 14:50
  • 267

[常用知识] SQL DB LINK创建

1、狀況描述 我們常常需要遠程訪問局域網內的其他服務端,我們需要簡單幷實用方法去實現。 2、解決方案 --a.先刪除服務器上的名為ELOAN_LNK 的DB LINK exec   sp_drops...
  • fengxu511
  • fengxu511
  • 2013年11月21日 08:11
  • 637

oracle db_link的使用说明

原创文章,转载请标明出处
  • litall
  • litall
  • 2015年12月09日 12:24
  • 132

通过数据链接(Database Link),从Oracle 10g 连接 SQL Server 2000(实例)

 通过数据链接(Database Link),从Oracle 10g 连接 SQL Server 2000(实例)从Oracle 10g连接SQL Server2000,需要用透明网关(Transpa...
  • daimin1983
  • daimin1983
  • 2008年12月05日 09:34
  • 7041

数据库(SQL)之trigger(触发器)的使用以及视图(view)的基本实现

对于触发器,首先需要明确的是一下几点: trigger_name 必须给触发器命令,最多64个字符,建议用表的名字_触发器类型的缩写方法命名。如ttlsa_posts_bi(表ttlsa_posts,...
  • u013816144
  • u013816144
  • 2015年12月05日 12:18
  • 1235

DB_LINK的个人理解

db_link就是从一个ORACLE数据库服务连接到另一个oracle数据库服务的单方向的指针。 db_link连接是在A数据库上的用户能使用存储在A上的link来调用B数据库上的信息。 db_l...
  • wzy0_0
  • wzy0_0
  • 2014年05月07日 14:03
  • 840

SQL SERVER2005建Link Server

SQL Server2005中的link server类似于Oracle里面的DB Link , 透过link server可以访问另一个数据库中的对象 , 这些Link Server可以是SQL S...
  • zsuguangh
  • zsuguangh
  • 2010年12月16日 23:03
  • 4417

数据库链接DB_LINK

通过数据库链接,可以访问另外一个数据库中的表。 select * from table_name@db_link; 数据库链接通常分为公有的和私有的: 1.private数据库链接 私有数据库链接只能...
  • wlf123a
  • wlf123a
  • 2017年10月23日 20:09
  • 463

sqlserver2000字符串函数(上)

字符串函数简介字符串函数对N进制数据、字符串和表达式执行不同的运算。此类函数作用于char、varchar、binary和varbinary数据类型以及可以隐式转换为char或varchar的数据类型...
  • thc1987
  • thc1987
  • 2008年12月15日 10:48
  • 4742

ORACLE DB TRIGGER详解

本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 ...
  • caixingyun
  • caixingyun
  • 2014年09月26日 10:43
  • 1550
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server2000 ,在trigger中使用DB link
举报原因:
原因补充:

(最多只允许输入30个字)