注册 登录
编程论坛 SQL Server论坛

如何在存储过程中使用分布试查询?

power6d 发布于 2007-07-13 09:31, 965 次点击
sp_addlinkedserver @server = 'LinkServer',
@srvproduct = ' ',
@provider = 'SQLOLEDB',
@datasrc = '192.168.100.242'


sp_addlinkedsrvlogin @rmtsrvname = 'LinkServer',
@useself = 'false',
@rmtuser = 'sa',
@rmtpassword = 'zxtzgs_sql2000'


Create Procedure Proc_Tmp
As
Begin Distributed Transaction

Select * From
LinkServer.zxzadb.dbo.YL_YDLX

Commit Transaction

Execute Proc_Tmp

结果报错:
服务器: 消息 7391,级别 16,状态 1,行 3
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。

请高手帮忙解决。
5 回复
#2
bygg2007-07-13 09:55
在"管理工具"-->"ODBC数据源管理器" 里面添加一个数据源.
#3
power6d2007-07-13 10:00
我用的不是ODBC。
#4
power6d2007-07-13 10:02
现在奇怪的是:
sp_addlinkedserver @server = 'LinkServer',
@srvproduct = ' ',
@provider = 'SQLOLEDB',
@datasrc = '192.168.100.242'


sp_addlinkedsrvlogin @rmtsrvname = 'LinkServer',
@useself = 'false',
@rmtuser = 'sa',
@rmtpassword = 'zxtzgs_sql2000'

Select * From
LinkServer.zxzadb.dbo.YL_YDLX

这样能执行成功,但放入事物中后就不行了。
#5
bernie2007-07-19 16:04

因为2个server不在同一个网域,所以不能进行事物操作,需要对windows的一个文件进行操作
c:\windows\system32\drives\etc\hosts
把这个文件打开在最下面添加下面语句
A Server:
192.168.0.1 A
B Server:
192.172.0.2 B

然后保存退出就好了,
前面的是IP地址,后面的是电脑名。

#6
power6d2007-07-25 15:30
我的IP是192.168.100.12
服务器是192.168.100.242
1