数据从excel上传到数据库

我有一个每天更新的Excel文件,我必须每天更新数据库(SQL Server 2005)中的logging。

从excel中获取数据并更新数据库的查询是什么?

例如表结构如:

Empid EmpName Emp.Des 001 Robert Engineer 002 Philip Trainer 003 John Engineer 

新的excel是这样的:

 004 Tom Engineer 005 Harry Trainer 006 Samm Engineer 

所以在数据库更新之后,表格将如下所示:

 001 Robert Engineer 002 Philip Trainer 003 John Engineer 004 Tom Engineer 005 Harry Trainer 006 Samm Engineer 

如果你必须使用SQL来做,你可以这样做:

 SELECT * INTO tableName FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=d:\xmlimport_test.xls', 'SELECT * FROM [Test$]') 

更多的例子

但是有一些要求可以满足:

  1. 你有32位的SQL Server(没有64位的Excel驱动程序)
  2. 您必须允许adhoc分布式查询

     sp_configure 'show advanced options', 1; GO RECONFIGURE; GO sp_configure 'Ad Hoc Distributed Queries', 1; GO RECONFIGURE; GO 

如果你有64位的SQL Server,那么你会得到错误: MS Jet OLEDB 4.0 cannot be used for distributed queries because the provider is used to run in apartment mode. 有一些解决方法: http : //social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/4887d91f-6ac7-40c0-9fc8-5cdd0634e603

但最好的方法是创buildSSIS包并将其安排为SQL Server作业

您可以使用SSIS将Excel数据导入到数据库。 这是起点 。

– 数据从Excel导出到SQL Server中的新表

 SELECT * INTO tblImportedFromExcel FROM OPENROWSET ( 'Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=c:\testing.xls;HDR=YES', 'SELECT * FROM [Sheet1$]' ) 

– 数据从EXCEL导出到SQL Server中的EXISTING表

 INSERT INTO tblImportedFromExcel SELECT * FROM OPENROWSET ( 'Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=c:\testing.xls;HDR=YES', 'SELECT * FROM [Sheet1$]' ) 

这将适用于Excel 2003文件。