默认设置 SQL Server 不允许远程连接这个事实可能会导致失败
场景:链接服务器没法查询:默认设置 SQL Server 不允许远程连接这个事实可能会导致失败
链接服务器无法查询:默认设置 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也有类似提示,是什么原因?
------解决方案--------------------
应该是楼主的链接服务器没有建立好了
请在A机器上删除链接服务器后,在查询分析中执行下面语句:
------解决方案--------------------
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
------解决方案--------------------
不能对链接服务器上的表执行INSERT INTO操作。
在链接服务器上创建本地服务器的连接。再执行:insert into dbo.tablename from [本地].[db].[dbo].[tablename]
链接服务器无法查询:默认设置 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
------解决方案--------------------
不能对链接服务器上的表执行INSERT INTO操作。
在链接服务器上创建本地服务器的连接。再执行:insert into dbo.tablename from [本地].[db].[dbo].[tablename]