链接服务器无法查询:默认设置 SQL Server 不允许远程连接这个事实可能会导致失败

phuson 2013-08-29 10:53:39
A机器 安装 iis ,sql server 2005 express
B机器 安装 sql server 2005 ,已经打开了远程连接

A机器上的asp程序可以正常连接到 B 机器的sql server,
A机器上 sql server management studio 用链接服务器abc查询 B机器的sql server 2005时,

select * from abc.xx.dbo.tb;

有如下提示:

链接服务器"abc"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "登录超时已过期"。
链接服务器"abc"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "建立到服务器的连接时发生错误。连接到 SQL Server 2005 时,默认设置 SQL Server 不允许远程连接这个事实可能会导致失败。“

用openrowset也有类似提示,是什么原因?
...全文
341 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy__Huang 2013-08-29
  • 打赏
  • 举报
回复
exec sp_addlinkedserver'DB32',' ','SQLOLEDB','192.168.3.x\SQLEXPRESS2008R2' exec sp_addlinkedsrvlogin 'DB32','false',null,'sa','xxxxxxx' --查询 select * from 链接名称.数据库名.dbo.表名 --不用后删除 exec sp_dropserver'数据库名','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 exec sp_addlinkedserver @server=’别名’,@provider=’SQLOLEDB’,@srvproduct=’’,@datasrc=’远程服务器IP’ 远程注册成功: --exec sp_addlinkedserver '注册名','','SQLOLEDB','远程数据库名' --exec sp_addlinkedsrvlogin '注册名','false',null,'用户名','密码' --go
---涛声依旧--- 2013-08-29
  • 打赏
  • 举报
回复
应该是楼主的链接服务器没有建立好了 请在A机器上删除链接服务器后,在查询分析中执行下面语句:

EXEC sys.sp_addlinkedserver 
    @server = 'abc', -- sysname
    @srvproduct = N'', -- nvarchar(128)
    @provider = N'SQLNCLI10', -- nvarchar(128)	--或用SQLOLEDB
    @datasrc = N'B机器的IP', -- nvarchar(4000)
    @location = N'', -- nvarchar(4000)
    @provstr = N'', -- nvarchar(4000)
    @catalog = NULL -- sysname
GO

EXEC sys.sp_addlinkedsrvlogin 
    @rmtsrvname = 'abc', -- sysname
    @useself = 'false', -- varchar(8)
    @locallogin = NULL, -- sysname
    @rmtuser = 'sa', -- sysname
    @rmtpassword = '123456' -- sysname

EXEC dbo.sp_serveroption 
    @server = N'abc',
    @optname = N'rpc out',
    @optvalue = N'true'
GO

EXEC sys.sp_remoteoption 
    @remoteserver = 'abc', -- sysname
    @optname = 'rpc', -- varchar(35)
    @optvalue = 'true' -- varchar(10)
Shawn 2013-08-29
  • 打赏
  • 举报
回复
引用 4 楼 phuson 的回复:
select * from abc.xx.dbo.tb 上面这条能执行,我想把本地的表复制到链接服务器上,下面这条却不行: select * into abc.xx.dbo.tb from tb 应该怎么写好一点?
不能对链接服务器上的表执行INSERT INTO操作。 在链接服务器上创建本地服务器的连接。再执行:insert into dbo.tablename from [本地].[db].[dbo].[tablename]
phuson 2013-08-29
  • 打赏
  • 举报
回复
select * from abc.xx.dbo.tb 上面这条能执行,我想把本地的表复制到链接服务器上,下面这条却不行: select * into abc.xx.dbo.tb from tb 应该怎么写好一点?
phuson 2013-08-29
  • 打赏
  • 举报
回复
找到原因了,B机器IP后面要加上,1433才可以,对了,A机器sqlserver不是默认的1433

22,210

社区成员

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

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