深入SQL SERVER 跨服务器查询详解

发布时间:2020-12-20编辑:脚本学堂
本文介绍下,有关sql server中跨服务器查询的相关内容,共介绍四种实现方法,并提供多个sql查询实例供参考,希望对大家有所帮助。

在执行跨服务器查询之前,运行:
 

复制代码 代码示例:
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

方法一:
用OPENDATASOURCE
下面是个跨SQLServer查询的示例
 

复制代码 代码示例:
Select TableA.*,TableB.* From OPENDATASOURCE(
         'SQLOLEDB',
         'Data Source=ServerA;User ID=UserID;Password=Password'
         ).databaseAName.dbo.TableA
Left Join
OPENDATASOURCE(
         'SQLOLEDB',
         'Data Source=ServerB;User ID=UserID;Password=Password'
         ).databaseBName.dbo.TableB On TableA.key=TableB.key

下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。
 

复制代码 代码示例:
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:Financeaccount.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

sql语句实现跨Sql server数据库操作实例 - 查询远程SQL,本地sql数据库与远程SQL的数据传递

(1)查询192.168.1.1的数据库(TT)表test1的数据
 

复制代码 代码示例:
select * from opendatasource('sqloledb','server=192.168.1.1;uid=sa;pwd=123456;database=TT').TT.dbo.test1

(2)从192.168.1.2的数据库(TT)表test2插入192.168.1.1数据库(TT)的表test1去
 

复制代码 代码示例:
insert into opendatasource('sqloledb','server=192.168.1.1;uid=sa;pwd=123456;database=TT').TT.dbo.test1 (id,[name],password) select id,[name],password
from opendatasource('sqloledb','server=192.168.1.2;uid=sa;pwd=123456;database=TT').TT.dbo.test2

方法二(也可以在企业管理器里添加 linkServer):
sp_addlinkedserver
创建一个链接的服务器,使其允许对分布式的、针对 OLE DB 数据源的异类查询进行访问。在使用 sp_addlinkedserver 创建链接的服务器之后,此服务器就可以执行分布式查询。如果链接服务器定义为 Microsoft? SQL Server?,则可执行远程存储过程。

语法
sp_addlinkedserver [ @server = ] 'server'
    [ , [ @srvproduct = ] 'product_name' ]
    [ , [ @provider = ] 'provider_name' ]
    [ , [ @datasrc = ] 'data_source' ]
    [ , [ @location = ] 'location' ]
    [ , [ @provstr = ] 'provider_string' ]
    [ , [ @catalog = ] 'catalog' ]

权限
执行许可权限默认授予 sysadmin 和 setupadmin 固定服务器角色的成员。

简单示例:
 

复制代码 代码示例:
//创建linkServer
exec sp_addlinkedserver 'srv_lnk','','SQLOLEDB','服务器名'
//登陆linkServer
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'用户名','密码'
//查询linkServer的数据库DataBaseA的表TableA
Select * From srv_lnk.DataBaseA.dbo.TableA
//List the tables in the linked server
EXEC sp_tables_ex txtsrv

示例
A. 使用用于 SQL Server 的 Microsoft OLE DB 提供程序
使用用于 SQL Server 的 OLE DB 创建链接服务器

以下的这个例子,创建一台名为 SEATTLESales 的链接服务器,该服务器使用用于 SQL Server 的 Microsoft OLE DB 提供程序。
 

复制代码 代码示例:
USE master
GO
EXEC sp_addlinkedserver
    'SEATTLESales',
    N'SQL Server'
GO

在 SQL Server 的实例上创建链接服务器
此示例在 SQL Server 的实例上创建一台名为 S1_instance1 的链接服务器,该服务器使用 SQL Server 的 Microsoft OLE DB 提供程序。
 

复制代码 代码示例:
EXEC    sp_addlinkedserver    @server='S1_instance1', @srvproduct='',
                                @provider='SQLOLEDB', @datasrc='S1instance1'

B. 使用用于 Jet 的 Microsoft OLE DB 提供程序
此示例创建一台名为 SEATTLE Mktg 的链接服务器。

说明 本示例假设已经安装 Microsoft Access 和示例 Northwind 数据库,且 Northwind 数据库驻留在 C:MsofficeAccessSamples。
 

复制代码 代码示例:
USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
   @server = 'SEATTLE Mktg',
   @provider = 'Microsoft.Jet.OLEDB.4.0',
   @srvproduct = 'OLE DB Provider for Jet',
   @datasrc = 'C:MSOfficeAccessSamplesNorthwind.mdb'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
   'SEATTLE Mktg',
   'OLE DB Provider for Jet',
   'Microsoft.Jet.OLEDB.4.0',
   'C:MSOfficeAccessSamplesNorthwind.mdb'
GO

C. 使用用于 Oracle 的 Microsoft OLE DB 提供程序
此示例创建一台名为 LONDON Mktg 的链接服务器,该服务器使用用于 Oracle 的 Microsoft OLE DB 提供程序,并且假设此 Oracle 数据库的 SQL*Net 别名为 MyServer。
 

复制代码 代码示例:
USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
   @server = 'LONDON Mktg',
   @srvproduct = 'Oracle',
   @provider = 'MSDAORA',
   @datasrc = 'MyServer'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
   'LONDON Mktg',
   'Oracle',
   'MSDAORA',
   'MyServer'
GO

D. 将 data_source 参数与用于 ODBC 的 Microsoft OLE DB 提供程序一起使用
此示例创建一台名为 SEATTLE Payroll 的链接服务器,该服务器使用用于 ODBC 的 Microsoft OLE DB 提供程序和 data_source 参数。

说明 在执行 sp_addlinkedserver 之前,必须在服务器上将指定的 ODBC 数据源名称定义为系统 DSN。
 

复制代码 代码示例:
USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
   @server = 'SEATTLE Payroll',
   @provider = 'MSDASQL',
   @datasrc = 'LocalServer'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
   'SEATTLE Payroll',
   '',
   'MSDASQL',
   'LocalServer'
GO

E. 将 provider_string 参数与用于 ODBC 的 Microsoft OLE DB 提供程序一起使用
此示例创建一台名为 LONDON Payroll 的链接服务器,该服务器使用用于 ODBC 的 Microsoft OLE DB 提供程序和 provider_string 参数。