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至Sql Server用DB Link查询缓慢原因之一

公司系统有一个每日同步进程,从A系统数据库(Oracle 11g)提取B系统数据库(Sql Server 2005)每天新增的数据,实现的方法为:在A数据库中建立物理视图,来通过DBlink引用B数据...

SQL Server 使用触发器(trigger)发送电子邮件步骤详解

本文分步骤给大家详细介绍了SQL Server 使用触发器(trigger)发送电子邮件的方法,需要的朋友可以参考下 sql 使用系统存储过程 sp_send_dbmail 发送电子邮件语法...

sql server2000中使用convert来取得datetime数据类型样式

http://www.cnblogs.com/Gavinzhao/archive/2009/11/10/1599690.html sql server2000中使用convert来取得dat...

SQL Server 2000中的触发器使用

定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。       常见的触发器有三种:分别应用于Insert , ...

SQL Server 2000 中使用正则表达式

这两天有个需求,需要在数据库中判断字符串的格式,于是从网上搜集了一些资料,整理了一下。下面这个是一个自定义函数,用户可以调用这个函数判断指定的字符串是否符合正则表达式的规则.CREATE FUNCTI...

SQL Server 2000中全文检索的使用

微软的SQL Server数据库是一个在中低端企业应用中占有广泛市场的关系型数据库系统,它以简单、方便、易用等特性深得众多软件开发人员和数据库管理人员的钟爱。但SQL Server 7.0以前的数据库...

SQL Server2000索引结构及使用方法 (3)

转自:赛迪网技术社区    作者:yunlan 2、只要建立索引就能显著提高查询速度 事实上,我们可以发现上面的例子中,第2、3条语句完全相同,且建立索引的字段也相同;不同的仅是前者在fari...
  • sgear
  • sgear
  • 2011-02-28 08:17
  • 442

sql server 2000更新技巧&select 查询中带参数,游标中使用exec

更新多个ID最后时间的记录 update  a set qesl_no=0 from f_gxhz a where fbid_no in ('117887','117889','118112') an...

SQL Server 2000索引结构及使用方法

一、深入浅出理解索引结构   实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(no...

使用 SQL Server 2000 索引视图提高性能1

什么是索引视图? 许多年来,Microsoft SQL Server" 一直都提供创建虚拟表(称为视图)的功能。在过去,这些视图主要有两种用途: 提供安全机制,将用户限制在一个或多个基表中的数...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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