数据从Excel上传到数据库

时间:2012-01-23 07:43:50

标签: sql-server excel

我有一个每日更新的excel文件,我必须每天更新数据库(sql server 2005)中的记录。

从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

3 个答案:

答案 0 :(得分:2)

如果必须使用SQL,可以执行以下操作:

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

More examples

但要满足一些要求:

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

    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'Ad Hoc Distributed Queries', 1;
    GO
    RECONFIGURE;
    GO
    
  3. 如果你有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

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

答案 1 :(得分:0)

您可以使用SSIS将Excel数据导入数据库。这是starting point

答案 2 :(得分:0)

- 数据从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文件。