代码改变世界

分布式查询的具体实现一(SQL Server,Access,Excel)

2011-10-26 22:37  Echo.  阅读(289)  评论(0)    收藏  举报

 

一,链接服务器
use master;
go
--创建产品为SQL Server的链接链接服务器. 如果链接服务器为SQL Server实例,则可以运行远程存储过程
sp_addlinkedserver 'MyLinkServer','','SQLNCLI','XIAOYAN-BE50AF5'NULLNULL ,NULL;
go
sp_addlinkedsrvlogin 'MyLinkServer','false',NULL,'sa','sa';--设置登录映射
go
select * from MyLinkServer.Northwind.dbo.Categories;
go

--创建基于Microsoft OLE DB Provider for Jet for Access的链接服务器,注意Access 2003的OLE DB接口为Microsoft.Jet.OLEDB.4.0,Access 2007为Microsoft.ACE.OLEDB.12.0
sp_addlinkedserver 'NWind''Access','Microsoft.Jet.OLEDB.4.0''F:\Northwind.mdb',NULL,NULL,NULL;
go
sp_addlinkedsrvlogin 'NWind''false'NULL'Admin'NULL;
go
select * from NWind...Employees;
go

--创建基于Microsoft OLE DB Provider for Jet for Excel的链接服务器
sp_addlinkedserver 'Excel''Excel','Microsoft.Jet.OLEDB.4.0''F:\ExcelFile.xls',NULL,'Excel 5.0',NULL;
go
select * from Excel...Sheet1$;
go

--如果 SQL Server 在可以访问远程共享的域帐户下运行,则可以使用 UNC 路径来代替映射驱动器。
sp_addlinkedserver 'ExcelShare','Excel','Microsoft.Jet.OLEDB.4.0','\\MyServer\MyShare\Spreadsheets\DistExcl.xls',NULL,'Excel 5.0',NULL;

--查看本地链接服务器
sp_linkedservers;
go
select * from sys.servers;
go


二,临时名称
OPENROWSET 和 OPENDATASOURCE 并非提供链接服务器中的所有可用功能,例如登录映射管理、查询链接服务器的元数据的功能和配置各种连接设置(如超时值)的功能。
1.OPENROWSET 函数包含访问OLE DB数据源中远程数据所需的全部连接信息。当访问链接服务器中的表时,这种方法是一种替代方法。尽管查询可能返回多个结果集,但 OPENROWSET 只返回第一个结果集。

OPENROWSET 还通过内置的 BULK 访问接口支持大容量操作,正是有了该访问接口,才能从文件读取数据并将数据作为行集返回。

--Microsoft OLE DB Provider for SQLNCLI
select t.* from openrowset('SQLNCLI','XIAOYAN-BE50AF5';'sa';'sa','SELECT * FROM Northwind.dbo.Categories;'as t;
go
select t.* from openrowset('SQLOLEDB','Server=XIAOYAN-BE50AF5;Trusted_Connection=yes;','SELECT *
      FROM Northwind.dbo.Categories;
'as t;
go
--Microsoft OLE DB Provider for Jet
select t.* from openrowset('Microsoft.Jet.OLEDB.4.0','F:\Northwind.mdb';'Admin';'',Employees) as t;--Access 2000
go
select t.* from openrowset('Microsoft.ACE.OLEDB.12.0','Excel 5.0;HDR=YES;DATABASE=F:\ExcelFile.xlsx',sheet1$) as t;--Excel 2007
go
select t.* from openrowset('Microsoft.Jet.OLEDB.4.0','Excel 5.0;HDR=YES;DATABASE=F:\ExcelFile.xls',sheet1$) as t;--Excel 2003

2.OPENDATASOURCE 函数可以在能够使用链接服务器名的相同 Transact-SQL 语法位置中使用,因此,就可以将 OPENDATASOURCE 用作四部分名称的第一部分,该名称指的是 SELECTINSERTUPDATE 或 DELETE 语句中的表或视图的名称;或者指的是 EXECUTE 语句中的远程存储过程。当执行远程存储过程时,OPENDATASOURCE 应该指的是另一个 SQL Server。OPENDATASOURCE 不接受参数变量。

select * from opendatasource('SQLNCLI','Data Source=XIAOYAN-BE50AF5;User ID=sa;Password=sa;').Northwind.dbo.Categories;
go
select * from opendatasource('SQLOLEDB','Data Source=XIAOYAN-BE50AF5;User ID=sa;Password=sa;').Northwind.dbo.Categories;
go
select t.* from opendatasource('Microsoft.Jet.OLEDB.4.0','Data Source=F:\ExcelFile.xls;User ID=Admin;Password=;Extended properties=Excel 5.0;')...Sheet1$ as t;
go
select t.* from opendatasource('Microsoft.Jet.OLEDB.4.0','Data Source=F:\Northwind.mdb;User ID=Admin;Password=;')...Categories as t;
go