首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2013-09-05 
链接服务器无法查询:默认设置 SQL Server 不允许远程连接这个事实可能会导致失败A机器 安装 iis ,sql serv

链接服务器无法查询:默认设置 SQL Server 不允许远程连接这个事实可能会导致失败
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也有类似提示,是什么原因? 远程连接 sql?server
[解决办法]
应该是楼主的链接服务器没有建立好了
请在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)



[解决办法]
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 
[解决办法]
引用:
select * from abc.xx.dbo.tb 
上面这条能执行,我想把本地的表复制到链接服务器上,下面这条却不行:
select * into abc.xx.dbo.tb from tb 
应该怎么写好一点?

不能对链接服务器上的表执行INSERT INTO操作。
在链接服务器上创建本地服务器的连接。再执行:insert into dbo.tablename from [本地].[db].[dbo].[tablename]

热点排行