sql个人数据库入门基础知识 (sql数据库入门基础知识公式)

在我昨天的文章《在SQL中读取和使用Excel数据》的评论中,@足彩沙龙 朋友提出,想要我详细说一下OPENROWSET中各个参数的含义。今天我就详细说说SQLServer神奇好用的行集函数。

sql个人数据库入门基础知识,sql数据库入门函数基础知识

SQLServer的行集函数

SQLServer中有5个行集函数:

  • OPENDATASOURCE('驱动引擎', '数据源')
  • OPENJSON('Json字符串', 其它参数)
  • OPENROWSET('驱动引擎', '数据源', 其它参数)
  • OPENQUERY(链接服务器,查询脚本)
  • OPENXML('XML字符串',其它参数)

这五个行集函数写法不同,但大多可实现共同目的。比如要读取Excel,我们既可以使用OpenDataSource、也可以使用OpenRowSet,甚至可以先创建一个链接服务器,再用OpenQuery读取,殊途同归。

其中,从外部Excel文件需要用到的,主要是OpenDataSource、OpenRowSet和OpenQuery,今天我们重点说说前两个。

其中的驱动引擎含义为:

注册为用于访问数据源的 OLE DB 访问接口的 PROGID 的名称。 的数据类型为 char,并且没有默认值。

说的通俗些,就是一个用来表示驱动引擎的字符串了。比如,我们要读取Excel,就主要用到'Microsoft.Jet.OLEDB.4.0'(简称Jet引擎)或'Microsoft.ACE.OLEDB.12.0'(简称ACE引擎)两种引擎。

要查看我们的数据支持的驱动引擎,可执行:

EXEC master..xp_enum_oledb_providers 

sql个人数据库入门基础知识,sql数据库入门函数基础知识

在SQL管理器中也可以查看:

sql个人数据库入门基础知识,sql数据库入门函数基础知识

Jet 引擎可以访问 Office 97-2003,但不能访问 Office 2007及以后。ACE 引擎是随 Office 2007 一起发布的数据库连接组件,既可以访问 Office 2007,也可以访问 Office 97-2003

ACE引擎可以访问正在打开的 Excel 文件,而 Microsoft.Jet.OLEDB.4.0 是不可以的。

OpenDataSource和OpenRowSet两者之间有什么区别呢?

其实很容易理解,OpenDataSource返回的像整个Excel文件,您还需要继续指定它对应的Sheet;而OpenRowSet返回的直接是某个Sheet

比如,我们要读取一个Excel文件“销售数据”里面的一个Sheet“销售表”,针对不同的Excel版本,实现方法分别如下:

如何读取Excel97~2003

1、使用OpenDataSource和Jet引擎

select * from OpenDataSource('Microsoft.Jet.OLEDB.4.0', 
'Data Source=C:\销售数据.xls;Extended Properties=EXCEL 5.0')...[销售表$]; 

2、使用OpenRowSet和Jet引擎

select * from OpenRowSet('Microsoft.Jet.OLEDB.4.0', 'Excel 5.0; HDR=Yes; IMEX=1; Database=C:\销售数据.xls', [销售表$]);

数据源中的HDR、IMEX的含义这里有必要说一下:

HDR=Yes,第一行是标题,做字段名。

HDR=NO,第一行是数据。

系统默认的是YES

IMEX 有三种模式:

0—输入(写入)模式

1—输出(读取)模式

2—完全(读取、写入)模式

3、使用OpenDataSource和ACE引擎

select * from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; HDR=Yes; IMEX=1; Database=C:\销售数据.xls')...[销售表$];

4、使用OpenRowSet和ACE引擎

select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; HDR=Yes; IMEX=1; Database=c:\销售数据.xls', [销售表$]);

如何读取Excel2007及以后

1、使用OpenDataSource和ACE引擎

select * from OpenDataSource('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; HDR=Yes; IMEX=1; Database=C:\销售数据.xlsx')...[销售表$];

2、使用OpenRowSet和ACE引擎

select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0; HDR=Yes; IMEX=1; Database=C:\销售数据.xlsx', [销售表$]);

希望对您有所帮助!