同一个服务器中在一个连接查询不同的数据库中的表,可以在表名前加上数据库的名为前缀
【示例】
select * from 数据库.dbo.表
在不同服务器中,一个服务器的连接中查询另外一个服务器中的数据库,可以在sql语句中使用OpenDataSource('sqloledb','server=服务器IP地址;uid=数据库登陆用户;pwd=密码').数据库名.dbo.表名
【示例】
select * from OpenDataSource('sqloledb','server=xxx.xxx.xxx.xxx;uid=sa;pwd=*****').database_name.dbo.table_name
【说明】
OpenDataSource()函数不接受参数变量。只能是写死指定的连接字符串,不能使用变量,所以在存储过程中不能动态的设置OpenDataSource()参数,这一点及其的不安全&不方便
使用OpenDataSource()函数需要启用一些高级配置选项:
消息 15281,级别 16,状态 1,第 1 行 SQL Server 阻止了对组件“Ad Hoc Distributed Queries”的 STATEMENT“OpenRowset/OpenDatasource”的访问,因为此组件已作为此服务器安全配置的一部分而被 关闭。系统管理员可以通过使用 sp_configure 启用“Ad Hoc Distributed Queries”。有关启用“Ad Hoc Distributed Queries”的详细信息,请搜索 SQL Server 联机丛书中的“Ad Hoc Distributed Queries”。
可以在当前连接的数据库中,通过以下语句开启该组件
exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure
关闭上述组件可以执行一下语句:
exec sp_configure 'Ad Hoc Distributed Queries',0 reconfigure exec sp_configure 'show advanced options',0 reconfigure
使用图形界面创建链接服务器:
创建链接服务器,可以使用MSSMS-->服务器对象-->链接服务器-->右键:新建链接服务器
常规:
安全性:
使用存储过程创建链接服务器
在当前服务器的连接中,同时执行以下存储过程,创建其他服务器(即目标服务器)为链接服务器
exec sp_addlinkedserver--创建链接服务器 @server='链接名称',--要访问的服务器别名(一般就是直接使用服务器地址) @srvproduct='', @provider='SQLOLEDB', @datasrc='目标服务器地址'--要访问的服务器地址 go exec sp_addlinkedsrvlogin--添加链接服务器的登陆用户 '链接名称',--被访问的服务器别名 'false', null, '用户名',--目标服务器账号 '密码'--目标服务器密码
示例:从链接服务器中查询
select * from 链接服务器别名.database_name.dbo.table_name
SQL文档:OPENDATASOURCE (Transact-SQL)
SQL SERVER服务器链接连接(即sql server的跨库连接)
SQL Server跨库跨服务器访问实现
利用sp_addlinkedserver实现远程数据库链接
跨库查询(OpenDataSource)与链接服务器(Linking Server)
SQL Server创建链接服务器,链接到Oracle和MySQL