2020-10-13 16:10:05 版本 : SQL SERVER 数据库跨服务器查询插入数据 - 流星期零 - 博客园
作者: 周杨 于 2020年01月21日 发布在分类 / 计算机应用 / 数据库 / SQLSERVER 下,并于 2020年10月13日 编辑
 历史版本

备注 修改日期 修改人
格式调整 2020-10-13 16:25:55[当前版本] 系统管理员
格式调整 2020-10-13 16:10:05 系统管理员
其他原因...增加“链接服务器信息查询” 2020-10-13 15:55:07 系统管理员
格式调整 2020-10-13 15:24:31 系统管理员

SQLserver的分布式查询:如果一个项目需要二至多台服务器,而我们又必须从几台服务器中将数据取出来,这就必须用分布式查询!
在这里有两个概念:本地数据源、远程数据源!
本地数据源指的是单个服务器上的数据而远程数据源指的是另一个SQL实例上的数据。

如何跨服务器取数呢?


一、 如果经常访问或数据量大,建议用链接服务器--创建链接服务器

1.创建linkserver

EXEC  sp_addlinkedserver

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

      @srvproduct='', --sqlserver不需要指定

      @provider='SQLOLEDB',

      @datasrc='192.168.1.102'   --要访问的服务器

2.创建链接服务器登陆信息

EXEC sp_addlinkedsrvlogin 

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

     'false', --useself

     NULL, --locallogin

     'sa', --帐号   

     '123456' --密码


3.查询示例

select * from srv_lnk.数据库名.dbo.表名

4.导入示例:

select * into 表 from srv_lnk.数据库名.dbo.表名go


5.链接服务器信息查询

exec sp_helpserver --查询链接服务器
select * from sys.servers --查询链接服务器链接地址

6.删除已经存在的链接服务器

if exists(select * from SYS.Servers where name=N'srv_lnk')
exec master.sys.sp_dropserver 'srv_lnk','droplogins'



二、 如果只是临时访问,可以直接用openrowset


1.查询示例

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

2.导入示例 

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

如何在企业管理器中设置呢?
SQL实例--->安全性--->链接服务器--->右键新建链接服务器常规中输入链接服务器的名字,选其它数据源,选SQLOLEDB,数据源写上,一般写IP地址再选安全性-----》选本地登陆----》模拟打勾用此安全上下文进行,输入用户与密码。

常见问题:1.在建立完链接服务器后,我们进行查询操作例:我们已对DFLD的服务器做了链接,紧接着我们想访问它中PUBS数据库中的Authors表Select * From DFLD.PUBS..Authors经常会出二类问题
1.提示 异类查询要求为连接设置 ANSI_NULLS 和 ANSI_WARNINGS 选项。这将确保一致的查询语义。请启用这 些选项,然后重新发出查询。 这种提示是因为没有将ANSI_NULLS与ANSI_WARNINGS打开 SET ANSI_NULLS ON SET ANSI_WARNINGS ON Select * From DFLD.PUBS..Authors--这样就可以了!
2.提示 某机器MSDTC服务不可用 这种提示很简单,只需要将MSDTC服务打开就是了!注:需要双方均打开MSDTC服务,默认不打开



历史版本-目录  [回到顶端]
    知识分享平台 -V 5.1.4 -大信谛威