我有一个每日更新的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
答案 0 :(得分:2)
如果必须使用SQL,可以执行以下操作:
SELECT * INTO tableName FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
'Excel 8.0;Database=d:\xmlimport_test.xls', 'SELECT * FROM [Test$]')
但要满足一些要求:
您必须允许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
但最好的方法是创建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文件。