使用sp_addlinkedserver、sp_dropserver 、sp_addlinkedsrvlogin和sp_droplinkedsrvlogin 远程查询数据
一、sp_addlinkedserver
创建链接服务器。 链接服务器让用户可以对 OLE DB 数据源进行分布式异类查询。 在使用 sp_addlinkedserver 创建链接服务器后,可对该服务器运行分布式查询。 如果链接服务器定义为 SQL Server 实例,则可执行远程存储过程。
1、语法:
sp_addlinkedserver [ @server= ] 'server'
[ , [ @srvproduct= ] 'product_name' ]
[ , [ @provider= ] 'provider_name' ]
[ , [ @datasrc= ] 'data_source' ]
[ , [ @location= ] 'location' ]
[ , [ @provstr= ] 'provider_string' ]
[ , [ @catalog= ] 'catalog' ]
2、参数:
[ @server= ] 'server'
要创建的链接服务器的名称。 server 的数据类型为 sysname,无默认值。
[ @srvproduct= ] 'product_name'
要添加为链接服务器的 OLE DB 数据源的产品名称。 product_name 的数据类型为 nvarchar(128),默认值为 NULL。 如果为 SQL Server,则不必指定provider_name、data_source、location、provider_string 和 catalog。
[ @provider= ] 'provider_name'
与此数据源对应的 OLE DB 访问接口的唯一编程标识符 (PROGID)。 对于当前计算机中安装的指定 OLE DB 访问接口,provider_name 必须唯一。 provider_name 的数据类型为nvarchar(128),默认值为 NULL;但如果忽略 provider_name,则使用 SQLNCLI。 (使用 SQLNCLI 并且 SQL Server 将重定向到 SQL Server Native Client OLE DB 访问接口的最新版本。)OLE DB 访问接口应以指定的 PROGID 在注册表中注册。
[ @datasrc= ] 'data_source'
由 OLE DB 访问接口解释的数据源的名称。 data_source 的数据类型为 nvarchar(4000)。 data_source 作为 DBPROP_INIT_DATASOURCE 属性传递以初始化 OLE DB 访问接口。
[ @location= ] 'location'
由 OLE DB 访问接口解释的数据库的位置。 location 的数据类型为 nvarchar(4000),默认值为 NULL。 location 作为 DBPROP_INIT_LOCATION 属性传递以初始化 OLE DB 访问接口。
[ @provstr= ] 'provider_string'
OLE DB 访问接口特定的连接字符串,它可标识唯一的数据源。 provider_string 的数据类型为 nvarchar(4000),默认值为 NULL。 provstr 或传递给 IDataInitialize 或设置为 DBPROP_INIT_PROVIDERSTRING 属性,以初始化 OLE DB 访问接口。
当针对 SQL Server Native Client OLE DB 访问接口创建链接服务器时,可以使用 SERVER 关键字来指定实例,即使用 SERVER=servername\instancename 指定特定 SQL Server 实例。 servername 是运行 SQL Server 的计算机的名称,instancename 是用户要连接的特定 SQL Server 实例的名称。
注意 |
|---|
|
若要访问镜像数据库,则连接字符串必须包含数据库名称。 该名称是数据访问接口启用故障转移尝试所必需的。 可以在 @provstr 或 @catalog 参数中指定数据库。 此外,连接字符串还可以提供故障转移伙伴名称。 |
[ @catalog= ] 'catalog'
与 OLE DB 访问接口建立连接时所使用的目录。 catalog 的数据类型为 sysname,默认值为 NULL。 catalog 作为 DBPROP_INIT_CATALOG 属性传递以初始化 OLE DB 访问接口。 在针对 SQL Server 实例定义链接服务器时,目录指向链接服务器映射到的默认数据库。
3、返回代码值:0(成功)或 1(失败)
详细参考:http://technet.microsoft.com/zh-cn/library/ms190479.aspx
二、sp_addlinkedsrvlogin
创建或更新 SQL Server 本地实例上的登录名与远程服务器中安全帐户之间的映射。
1、语法:
sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname'
[ , [ @useself = ] 'TRUE' | 'FALSE' | NULL ]
[ , [ @locallogin = ] 'locallogin' ]
[ , [ @rmtuser = ] 'rmtuser' ]
[ , [ @rmtpassword = ] 'rmtpassword' ]
2、参数:
[ @rmtsrvname = ] 'rmtsrvname'
应用登录映射的链接服务器的名称。 rmtsrvname 的数据类型为 sysname,无默认值。
[ @useself = ] 'TRUE' | 'FALSE' | 'NULL'
确定是否通过模拟本地登录名或显式提交登录名和密码来连接到 rmtsrvname。 数据类型为 varchar(8),默认值为 TRUE。
值为 TRUE 指定登录名使用自己的凭据连接到 rmtsrvname,而忽略 rmtuser 和 rmtpassword 参数。 FALSE 指定 rmtuser 和 rmtpassword 参数用于连接到指定 locallogin 的 rmtsrvname。 如果 rmtuser 和 rmtpassword 也设置为 NULL,则不使用登录名或密码来连接链接服务器。
[ @locallogin = ] 'locallogin'
本地服务器上的登录。 locallogin 的数据类型为 sysname,默认值为 NULL。 NULL 指定此项应用于连接到 rmtsrvname 的所有本地登录。 如果不为 NULL,则 locallogin 可以是 SQL Server 登录或 Windows 登录。 对于 Windows 登录来说,必须以直接的方式或通过已被授权访问的 Windows 组成员身份授予其访问 SQL Server 的权限。
[ @rmtuser = ] 'rmtuser'
当 @useself 为 FALSE 时,用于连接到 rmtsrvname 的远程登录名。 当远程服务器是不使用 Windows 身份验证的 SQL Server 实例时,rmtuser 是一个 SQL Server 登录名。 rmtuser 的数据类型为 sysname,默认值为 NULL。
[ @rmtpassword = ] 'rmtpassword'
与 rmtuser 关联的密码。 rmtpassword 的数据类型为 sysname,默认值为 NULL。
3、返回代码值:0(成功)或 1(失败)
详细参考:http://technet.microsoft.com/zh-cn/library/ms189811.aspx
三、sp_droplinkedsrvlogin
删除运行 SQL Server 的本地服务器上的登录与链接服务器上的登录之间的现有映射。
1、语法:
sp_droplinkedsrvlogin [ @rmtsrvname= ] 'rmtsrvname' ,
[ @locallogin= ] 'locallogin'
2、参数:
- [ @rmtsrvname = ] 'rmtsrvname'
-
应用 SQL Server 登录映射的链接服务器名称。rmtsrvname 的数据类型为 sysname,无默认值。 rmtsrvname 必须已存在。
- [ @locallogin = ] 'locallogin'
-
本地服务器上的 SQL Server 登录,它具有到链接服务器 rmtsrvname 的映射。locallogin 的数据类型为 sysname,无默认值。 locallogin 到 rmtsrvname 的映射必须已经存在。 如果为 NULL,则删除 sp_addlinkedserver 创建的默认映射(该映射将本地服务器上的所有登录映射到链接服务器上的登录)。
3、返回代码值:0(成功)或 1(失败)
详细参考:http://technet.microsoft.com/zh-cn/library/ms186218.aspx
四、sp_dropserver
从本地 SQL Server 实例中的已知远程服务器和链接服务器的列表中删除服务器。
1、语法:
sp_dropserver [ @server = ] 'server'
[ , [ @droplogins = ] { 'droplogins' | NULL} ]
2、参数:
-
[ @server = ] 'server'
要删除的服务器。 server 的数据类型为 sysname,无默认值。 server 必须存在。
[ @droplogins = ] 'droplogins' | NULL
指示如果指定了 droplogins,那么对于 server,还必须删除相关的远程服务器和链接服务器登录名。 @droplogins 的数据类型为 char(10),默认值为 NULL。
3、返回代码值:0(成功)或 1(失败)
详细参考:http://technet.microsoft.com/zh-cn/library/ms174310.aspx
示例:
--创建远程链接服务器
execute sys.sp_addlinkedserver @server='otherServer', --被访问的服务器别名
@srvproduct='',
@provider='SQLOLEDB',
@datasrc='192.168.1.3,1466\SFKLPOS\MSSQL2008' --被访问的服务器地址(IP地址,端口号\服务器名称)
--创建本地用户与远程服务器中用户之间的映射
execute sys.sp_addlinkedsrvlogin @rmtsrvname='otherServer', --被访问的服务器别名
@useself='false', --是否通过模拟本地登录名或显式提交登录名和密码来连接到远程服务器
@locallogin=null, --本地登录
@rmtuser='sa', --用户名
@rmtpassword='sa' --密码
go --建立完成之后就可以正常使用了
select * from otherServer.NewPosData.dbo.Site_ProductMap --连接服务器别名.数据库名称.dbo.表名称
go --删除运行本地与远程之间的用户映射
execute sys.sp_droplinkedsrvlogin @rmtsrvname='otherServer',@locallogin=null
--删除链接服务器
execute sys.sp_dropserver @server='otherServer',@droplogins='droplogins'
go
使用sp_addlinkedserver、sp_dropserver 、sp_addlinkedsrvlogin和sp_droplinkedsrvlogin 远程查询数据的更多相关文章
- sql语句 怎么从一张表中查询数据插入到另一张表中?
sql语句 怎么从一张表中查询数据插入到另一张表中? ----原文地址:http://www.phpfans.net/ask/MTc0MTQ4Mw.html 比如我有两张表 table1 字段 un ...
- SQL JOB
数据库同步是一种比较常用的功能.以下结合我自己的体会整理的,如果有理解不完全或者有误的地方望大牛不理赐教.下面介绍的就是数据库同步的两种方式: 1.SQL JOB的方式 sql Job的方式同步数据库 ...
- SqlServer2008 数据库同步的两种方式(Sql JOB)
尊重原著作:本文转载自http://www.cnblogs.com/tyb1222/archive/2011/05/27/2060075.html 数据库同步是一种比较常用的功能.下面介绍的就是数据库 ...
- SQL JOB实现数据库同步
数据库同步是一种比较常用的功能.以下结合我自己的体会整理的,如果有理解不完全或者有误的地方望大牛不理赐教.下面介绍的就是数据库同步的两种方式: 1.SQL JOB的方式 sql Job的方式同步数据 ...
- Distributed1:Linked Server 添加和删除
A linked server allows for access to distributed, heterogeneous queries against OLE DB data sources. ...
- sql server 跨库操作
SELECT *FROM OPENDATASOURCE('SQLOLEDB','Data Source=sql服务器名;User ID=用户名;Password=密码;').PersonDb.dbo. ...
- [转载]sql server 分布式查询
--用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB' ,'sq ...
- Sql Server 跨服务器连接
用openrowset连接远程SQL或插入数据 --如果只是临时访问,可以直接用openrowset --查询示例 select * from openrowset('SQLOLEDB', 'sql服 ...
- Distributed1:链接服务器
链接服务器(Linked Server)允许访问针对OLE DB数据源的分布式异构查询, 通过使用sys.sp_addlinkedserver创建链接服务器后,可以对此服务器运行分布式查询. 如果链接 ...
随机推荐
- struts表单域模型注入
表单使用struts标签,表单中每一个字段都可以这样来赋值 类(action).成员变量 这个叫域模型注入 <s:form action="orders" method=&q ...
- Git命令行大全
git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看远程所有分支 git ...
- Java & PHP & Javascript 通用 RSA 加密 解密 (长字符串)
系统与系统的数据交互中,有些敏感数据是不能直接明文传输的,所以在发送数据之前要进行加密,在接收到数据时进行解密处理:然而由于系统与系统之间的开发语言不同. 本次需求是生成二维码是通过java生成,由p ...
- Spring data jpa JavassistLazyInitializer 不仅是Json序列化问题.以及解决办法
最近偷点时间更新一下框架,使用SpringBoot2.0 整套一起更新一下,发现些小问题 Spring data jpa getOne 返回的是代理对象,延迟加载的,ResponseBody成Json ...
- 查看spark RDD 各分区内容
mapPartitionsWithIndexdef mapPartitionsWithIndex[U](f: (Int, Iterator[T]) => Iterator[U], preserv ...
- Ext Js 6+ 如何引入dashboard模版
最近很多人问我在ext js 6+的版本中怎么引入官方的dashboard模版,正好我好久没写博客了,这里我写一篇博客来说明一下. 在这里以ext js 6.2.1版本为例(注:需要安装Sencha ...
- 【Java核心技术】类型信息(Class对象 反射 动态代理)
1 Class对象 理解RTTI在Java中的工作原理,首先需要知道类型信息在运行时是如何表示的,这是由Class对象来完成的,它包含了与类有关的信息.Class对象就是用来创建所有“常规”对象的,J ...
- TensorFlow环境 人脸识别 FaceNet 应用(一)验证测试集
TensorFlow环境 人脸识别 FaceNet 应用(一)验证测试集 前提是TensorFlow环境以及相关的依赖环境已经安装,可以正常运行. 一.下载FaceNet源代码工程 git clone ...
- Java中的堆内存设置对线程创建数的影响以及-Xss参数的记录
Java的线程对象是存储在堆上的,所以,能够创建多少个线程,受到堆空间的大小限制,同时也受到每个线程的大小的限制,假如线程对象内部有一个非常大的数组字段,那就非常影响能够创建的线程的大小 我们的例子: ...
- IntelliJ IDEA 改变默认的签名 Administrator
/** * Created with IntelliJ IDEA. * User: Administrator * Date: 12-8-27 * Time: 下午11:29 * To change ...
注意