您的位置:首页 > 数据库

MS SQLSERVER如何实现跨服务器查询

2016-02-24 11:32 375 查看
有些时候为了分担服务器的负荷,或者各自完成自己的任务,望望是分布式,MS SQLSERVER
数据库部署在不同的服务器上,有些时候需要进行跨服务器查询,那么如何实现跨服务器查询呢,具体方法有好几种,下面列举两种:

--跨服务器查询如下:

SELECT a.*

FROM OPENROWSET('MSDASQL',

'DRIVER={SQL
Server};SERVER=10.27.27.160;UID=sa;PWD=ncunicom_alarm',

BSC_ALARM.dbo.ALARM_LIST) AS a
--其中,10.27.27.160为远程服务器IP,也可以使用别名,BSC_ALARM是远程数据库,ALARM_LIST远程数据库中的表

如:

insert into
dbo.Kqmx_200704

select *

from
openrowset('MSDASQL',

'DRIVER={SQL
Server};SERVER=192.168.1.253;UID=sa;PWD=',

one.dbo.Kqmx_200704)

另:

连接远程服务器进行数据查询时可以这么做:select * from
[**.**.**.**].test.dbo.t1

不过,不出意外的话会报错:在 sysservers 中未能找到服务器 '**.*.**.**'。请执行
sp_addlinkedserver 以将服务器添加到 sysservers。

添加sysservers:exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','**.*.**.**'

再查询:select * from srv_lnk.test.dbo.t1
(因为定义了“别名”,所以这儿“别名”)

除非两个服务器上的该用户的密码一样,否则会报:用户 '**' 登录失败。

指定登录用户:exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'rUser','rPwd'

再查询:select * from srv_lnk.test.dbo.t1,如果无意外的话就应该是成功的


sp_addlinkedserver

创建一个链接的服务器,使其允许对分布式的、针对 OLE DB
数据源的异类查询进行访问。在使用 sp_addlinkedserver 创建链接的服务器之后,此服务器就可以执行分布式查询。如果链接服务器定义为
Microsoft® SQL Server™,则可执行远程存储过程。

Exec sp_droplinkedsrvlogin
server,Null

Exec sp_dropserver server

EXEC sp_addlinkedserver

@server= 'server ',--被访问的服务器别名

@srvproduct= ' ',

@provider= 'SQLOLEDB ',

@datasrc= '10.23.11.28,3342 '
--要访问的服务器

EXEC sp_addlinkedsrvlogin

'server ', --被访问的服务器别名

'false ',

NULL,

'la0001 ', --帐号

'aaaaaa ' --密码

链接服务器没问题,在查询分析器里执行例如:select * from
[192.168.0.119].fash.dbo.vwAllUser没问题.

但如果想建立一个简单的存储过程:

CREATE PROCEDURE TEST AS

set nocount on

SET
ARITHABORT,CONCAT_NULL_YIELDS_NULL,QUOTED_IDENTIFIER,ANSI_NULLS,ANSI_PADDING,ANSI_WARNINGS
ON

set NUMERIC_ROUNDABORT off

select * from
[192.168.0.119].fash.dbo.vwAllUser

GO

不能保存此存储过程,提示:

错误7405:异类查询要求为连接设置 ANSI_NULLS 和 ANSI_WARNINGS
选项。这将确保一致的查询语义。请启用这些选项,然后重新发出查询。

解决办法:

在存储过程中加

SET ANSI_NULLS ON

SET ANSI_WARNINGS ON

SET XACT_ABORT on

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: