建立链接服务器的错误

Working20000 2009-09-01 09:32:14
消息 7399,级别 16,状态 1,第 1 行
链接服务器 "192.168.18.9" 的 OLE DB 访问接口 "SQLNCLI10" 报错。提供程序未给出有关错误的任何信息。
消息 7312,级别 16,状态 1,第 1 行
对链接服务器 "192.168.18.9" 的 OLE DB 访问接口 "SQLNCLI10" 的架构或目录的使用无效。提供了由四部分构成的名称,但访问接口并未显示必要的接口来使用目录或架构。

不能成功建立链接服务器!
...全文
716 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Working20000 2009-09-01
  • 打赏
  • 举报
回复
是链接服务器访问接口的设置问题!SQLLNCLI10接口属性中 把访问接口选项的把即席访问禁用掉了,哎
ks_reny 2009-09-01
  • 打赏
  • 举报
回复
用查詢分析器試著連一下遠程主機.
jiangshun 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xiequan2 的回复:]
引用 9 楼 working20000 的回复:
没有代码 就是在设计器里 添加链接服务器成功,但是在操作连接服务器上的表和存储过程的时候出现这样的问题。
数据库名.dbo.表名这样来访问,且存在目标表;
[/Quote]

猜想你八成连不上远程主机
xiequan2 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 working20000 的回复:]
没有代码 就是在设计器里 添加链接服务器成功,但是在操作连接服务器上的表和存储过程的时候出现这样的问题。
[/Quote]数据库名.dbo.表名这样来访问,且存在目标表;
--小F-- 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 working20000 的回复:]
没有代码 就是在设计器里 添加链接服务器成功,但是在操作连接服务器上的表和存储过程的时候出现这样的问题。
[/Quote]

能ping通不?/能ping通按照乌龟大侠代码来试下
Working20000 2009-09-01
  • 打赏
  • 举报
回复
没有代码 就是在设计器里 添加链接服务器成功,但是在操作连接服务器上的表和存储过程的时候出现这样的问题。
soft_wsx 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 soft_wsx 的回复:]
原代码弄出来!看看
[/Quote]ding
--小F-- 2009-09-01
  • 打赏
  • 举报
回复
看不懂 有代码没?
dawugui 2009-09-01
  • 打赏
  • 举报
回复
如果能.

不同服务器数据库之间的数据操作

--创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 '

--查询示例
select * from ITSV.数据库名.dbo.表名

--导入示例
select * into 表 from ITSV.数据库名.dbo.表名

--以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV ', 'droplogins '

--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset

--查询示例
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--生成本地表
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--把本地表导入远程表
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
select *from 本地表

--更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1

--openquery用法需要创建一个连接

--首先创建一个连接创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
--把本地表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a
inner join 本地表 b on a.列A=b.列A

--3、opendatasource/openrowset
SELECT *
FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
--把本地表导入远程表
insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名
select * from 本地表


htl258_Tony 2009-09-01
  • 打赏
  • 举报
回复
--创建链接服务器 
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 '

--查询示例
select * from ITSV.数据库名.dbo.表名

--导入示例
select * into 表 from ITSV.数据库名.dbo.表名

--以后不再使用时删除链接服务器
exec sp_dropserver 'ITSV ', 'droplogins '

--连接远程/局域网数据(openrowset/openquery/opendatasource)
--1、openrowset

--查询示例
select * from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--生成本地表
select * into 表 from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)

--把本地表导入远程表
insert openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)
select *from 本地表

--更新本地表
update b
set b.列A=a.列A
from openrowset( 'SQLOLEDB ', 'sql服务器名 '; '用户名 '; '密码 ',数据库名.dbo.表名)as a inner join 本地表 b
on a.column1=b.column1

--openquery用法需要创建一个连接

--首先创建一个连接创建链接服务器
exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
--查询
select *
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
--把本地表导入远程表
insert openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ')
select * from 本地表
--更新本地表
update b
set b.列B=a.列B
FROM openquery(ITSV, 'SELECT * FROM 数据库.dbo.表名 ') as a
inner join 本地表 b on a.列A=b.列A

--3、opendatasource/openrowset
SELECT *
FROM opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ' ).test.dbo.roy_ta
--把本地表导入远程表
insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陆名;Password=密码 ').数据库.dbo.表名
select * from 本地表
你是这样链接的吗?
dawugui 2009-09-01
  • 打赏
  • 举报
回复
[Quote=引用楼主 working20000 的回复:]
消息 7399,级别 16,状态 1,第 1 行
链接服务器 "192.168.18.9" 的 OLE DB 访问接口 "SQLNCLI10" 报错。提供程序未给出有关错误的任何信息。
消息 7312,级别 16,状态 1,第 1 行
对链接服务器 "192.168.18.9" 的 OLE DB 访问接口 "SQLNCLI10" 的架构或目录的使用无效。提供了由四部分构成的名称,但访问接口并未显示必要的接口来使用目录或架构。

不能成功建立链接服务器!
[/Quote]
能否直接拼通192.168.18.9?
华夏小卒 2009-09-01
  • 打赏
  • 举报
回复
用什么连得??
soft_wsx 2009-09-01
  • 打赏
  • 举报
回复
[code=SQL]--创建链接服务器
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','远程服务器名或ip地址'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
exec sp_serveroption 'srv_lnk','rpc out','true' --这个允许调用链接服务器上的存储过程
go

declare @id int
exec srv_lnk.qsoft2.dbo.ins 'people','mobile','1234567',@id=@id output

select * from openquery(linked_server_name,'select * from pocol')
select * from 链接服务器名.数据库名.dbo.表名


众所周知,在大型的数据库系统设计中,为了提升效率,不可避免的要将不用的业务放在不同的数据实例上,因此我们使用到了链接服务器,链接服务器为大家在不同的服务之间进行分布式数据操作提供了便利。本例子基于windows 2003操作系统,Sql server 2000(sp4)数据库。

首先要打开你本地服务器和远程服务器的MSDTC,如下图:


打开以后,在本地服务器上注册远程服务器的信息,创建linkedServer,操作代码如下:
sp_addlinkedserver @server='GKSRV',@srvproduct='',@catalog='gk_2005',@provider='SQLOLEDB',
@provstr='DRIVER={SQL Server};Initial Catalog=gk_2005;SERVER=10.16.37.109;UID=admin;PWD=1234;'
然后使用sp_linkedservers,查看此服务器是否已经成功注册为链接服务器,如果已经注册成功,则使用
EXEC sp_addlinkedsrvlogin 'GKSRV','false',注册login帐号,然后你就可以执行一个Sql语句,试试看看是否可以从链接服务器中操作数据了,
例如:
select top 10 * from gksrv.gk_2005.dbo.ndy_Class
就是从刚才我设置的链接服务器GkSrv中的一个表:ndy_Class中查询数据。

备注:
1、关于链接服务器的详细情况请参阅联机丛书中的sp_addlinkedserver、 sp_addlinkedsrvlogin、sp_addserver、sp_dropserver、sp_serveroption、sp_linkedservers等系统级存储过程。
2、关于此链接服务器的创建及其使用在不同环境下(全部内网服务器、一内网一公网服务器、全公网服务器)测试,均告通过。
3、有时候在存储过程中访问链接服务器的时候可能会碰到如下的提示,必须要对ANSI warning 和ANSI nulls进行设置,这时候按照如下的方法进行设置code]语法
soft_wsx 2009-09-01
  • 打赏
  • 举报
回复
原代码弄出来!看看

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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