SQL SERVER 链接服务器 以及 openrowset
简单来说,通过链接服务器,让访问其它服务器,像跟访问自身数据库一样方便。
from [链接服务器][数据库].[所有者].Tabel
创建链接服务器 两种方式 T_SQL 和SSMS T_SQL
–建立连接服务器
EXEC ‘远程服务器IP’,‘SQL ’
–标注存储
EXEC
@ = ‘’, --链接服务器的本地名称。也允许使用实例名称,例如\SQL1
@ = ‘’, --OLE DB数据源的产品名。对于SQL 实例来说,是’SQL ’
@ = ‘’ ,–这是OLE DB访问接口的唯一可编程标识。当没有指定它时,访问接口名称是 SQL 数据源。SQL 显式的是 ( SQL OLE DB )。的是 , 8或更高版本的是.。MS 和MS Excel的是 .Jet.OLEDB.4.0。IBM DB2的是,以及ODBC数据源的是
@ = ‘’, --这是特定OLE DB访问接口解释的数据源。对于SQL ,这是 SQL (或\)的网络名称。对于,这是SQL*Net别名。对于 MS 和,这是文件的完整路径和名称。对于ODBC数据源,这是系统DSN名称
@ = ‘’ ,–由特定OLE DB访问接口解释的位置
@ = ‘’ ,–OLE DB 访问接口特定的连接字符串。对于ODBC连接,这是ODBC连接字符串。对于MS Excel,这是Excel 5.0
@ = ‘’ --的定义变化基于OLE DB访问接口的实现。对于SQL ,这是可选的数据库名称,对于DB2,这个目录是数据库的名称
–创建链接服务器上远程登录之间的映射
EXEC ‘远程服务器IP’,‘false’,‘sa’,‘架构名’,‘访问密码’
–标注存储
EXEC
@ = ‘远程服务器IP’, --要添加登录名映射的本地链接服务器
@ = false, --当使用true值时,使用本地SQL或登录名连接到远程服务器名。如果设为false,存储过程 的、和参数将应用到新的映射中
@ = NULL, --这是映射到远程登录名的SQL 登录或用户的名称。如果这个参数置为NULL,映射将应用SQL 实例中的所有本地登录名
@ = ‘架构名’, --用来连接到链接服务器的用户/登录名的名称
@ = ‘访问密码’ --用来连接到链接服务器的用户/登录名的密码
–查看链接服务器信息
name,,,,,on,led,
from sys. where =1
配置链接服务器属性
exec ‘别名’,‘name’,‘远程服务器IP’
–标注存储
EXEC
@ = ‘’ --配置属性的链接服务器的名称
,@ = ‘’ --要配置的选项
,@ = ‘’ --选项的新值
–附参数
参 数 描 述
如果你确认SQL 实例与远程SQL 拥有相同的排序规则就启用这个设置。由于SQL 不再需要对数据源之间的字符列执行比较操作,把它们假定为相同的排序规则,这样做可以提升性能
name 如果启用了use 并且是非SQL 的数据源,则 name指定远程服务器排序规则的名称。这个排序规则名称必须是SQL 所支持的
指定在超时发生之前到链接服务器的连接会尝试多少秒。如果数值为“0”,sp_ 的 query 的服务器值用来当作默认值
data 如果启用,就允许分布式查询访问
lazy 如果设为true,则架构不会在查询开始时去检测远程表。尽管这样会减少远程查询的负载,但是如果架构发生了变化并且你没有进行架构检测,比如说查询中引用的对象不能与查询命令进行通信,就会生成错误
query 指定查询等待的超时值(秒数)。如果这个值为0,则query wait选项使用值
rpc 启用从服务器进行远程过程调用
rpc out 启用远程过程调用到服务器
use 指定是使用远程服务器排序规则(true)还是本地服务器排序规则(false)
–删除链接服务器属性
exec ‘4’
–标注存储
EXEC
@ = ‘’ --从SQL 实例中删除的链接服务器的名称
,@ = ‘’ --如果指定,则在删除链接服务器之前要删除登录名映射
–查看链接登录名
s.name ,s. ,s.,s.,
ll.,ll.,ll.,
p.name
from sys. ll
inner join sys. s on s.=ll.
left join sys. p on p.=ll.
where s. = 1
–删除链接服务器登录名映射
exec n ‘远程服务器IP’,NULL
–标注存储
EXEC n
@ = ‘远程服务器IP’ --登录名映射的链接服务器名称
@ = NULL --这是从链接服务器删除的SQL 登录或用户映射的名称
SSMS
选项 动态参数
如果为非零,则表明访问接口允许对参数化查询使用“?”参数标记语法。仅当该访问接口支持 rs 接口并支持“?”作为参数标记时,才应设置此选项。如果设置了此选项,则允许 SQL 针对该访问接口执行参数化查询。这种对访问接口执行参数化查询的能力会提高某些查询的性能。
嵌套查询
如果为非零,则表示访问接口允许在 FROM 子句中使用嵌套的 语句。如果设置了此选项,则允许 SQL 将某些查询委托给需要在 FROM 子句中嵌套 语句的访问接口。
仅零级
如果为非零,则只对访问接口调用 0 级的 OLE DB 接口。
允许进程内
如果为非零,则 SQL 允许将访问接口实例化为进程内服务器。如果未设置此选项,则默认行为是在 SQL 进程外实例化访问接口。在 SQL 进程外实例化访问接口,可防止 SQL 进程在访问接口中出错。在 SQL 进程外实例化访问接口时,不允许更新或插入长的引用列(text、ntext 或 image)。
非事务更新
如果为非零,则 SQL 允许更新,即使 不可用时也是如此。如果启用此选项,对访问接口的更新将不可恢复,因为该访问接口不支持事务。
作为访问路径的索引
如果为非零,则 SQL 尝试使用访问接口的索引来提取数据。默认情况下,索引只能用于元数据而且从不打开。
禁止link访问
如果设置了非零值,则 SQL 不允许通过 和 函数对 OLE DB 访问接口进行即席访问。如果未设置此选项,则 SQL 同样不允许进行即席访问。
存储过程中通过链接服务器访问远程服务器
执行存A服存储过程时会报 ‘未将[所用到的别名] 服务器配置为可用的RPC’ ,如何解决?
很简单,查看链接服务器的选项,将RPC 值由False 改为 TRUE 再调试,成功!
也有情况在这里无法更改,解决方案是:
exec sp_configure 'show advanced options', 1; --默认是0 GO RECONFIGURE WITH OVERRIDE; GO
包含访问 OLE DB 数据源中的远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法,并且是一种使用 OLE DB 连接并访问远程数据的一次性的、特殊的方法。可以在查询的 FROM 子句中像引用表名那样引用 函数。依据 OLE DB 提供程序的能力,还可以将 函数引用为 、 或 语句的目标表。尽管查询可能返回多个结果集,然而 只返回第一个。
语法
( ‘’
, { 'datasource' ; 'user_id' ; 'password'| 'provider_string' }, { [ catalog.] [ schema.] object| 'query' } )
参数
‘’
字符串,它代表在注册表中指定的 OLE DB 提供程序的友好名。 没有默认值。
‘’
字符串常量,它对应着某个特定的 OLE DB 数据源。 是将被传递到提供程序 接口以初始化提供程序的 CE 属性。通常,这个字符串包含数据库文件的名称、数据库服务器的名称,或者提供程序能理解的用于查找数据库的名称。
‘’
字符串常量,它是传递到指定 OLE DB 提供程序的用户名。 为连接指定安全上下文,并将它作为 属性传递进来以初始化提供程序。
‘’
字符串常量,它是将被传递到 OLE DB 提供程序的用户密码。当初始化提供程序时,将 作为 属性传递进来。
‘’
提供程序特定的连接字符串,将它作为 属性传递进来以初始化 OLE DB 提供程序。通常 封装初始化提供程序所需的所有连接信息。
目录或数据库的名称,其中驻留着指定的对象。
架构的名称或指定对象的对象所有者名称。
对象名称,它唯一地标识出将要操作的对象。
‘query’
是字符串常量,发送到提供程序并由提供程序执行。
–如果只是临时访问,可以直接用
–查询示例
* from (‘’
,‘sql服务器名’;‘用户名’;‘密码’
,数据库名.dbo.表名)
–导入示例
* into 表 from (‘’
,‘sql服务器名’;‘用户名’;‘密码’
,数据库名.dbo.表名)
错误7405:异类查询要求为连接设置ANSI-NULL和ANSI-选项,这将确保一致的查询语意,请启用这些选项,然后重新发出查询
解决方法:
SET ON
SET ON
GO
下面的方法可以参考:
方法一:用 方法去操作异地数据库
@i int
set @i=1
* from (‘’,‘Data =IP地址;User ID=sa;=密码’).异地数据库名.dbo.表名
A inner join 本地数据库名…表名 B
on A.关联字段=B.关联字段 and A.字段名称=@i
使用用于 SQL 的 OLE DB 提供程序访问 pubs 数据库中的 表,该数据库在一个名为 的远程服务器上。从 、 及 中初始化提供程序,并且使用 语句定义返回的行集。
USE pubs
GO
a.*
FROM (‘’,‘’;‘sa’;‘’,
‘ * FROM pubs.dbo. ORDER BY , ’) AS a
GO