数据从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$]')
更多的例子
但是有一些要求可以满足:
- 你有32位的SQL Server(没有64位的Excel驱动程序)
-
您必须允许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文件。