【问题标题】:Data uploading from excel to database数据从excel上传到数据库
【发布时间】:2012-01-23 07:43:49
【问题描述】:

我有一个每天更新的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

【问题讨论】:

  • 如果要每天进行,我建议将其制作成一个 SSIS 包。

标签: sql-server excel


【解决方案1】:

如果您必须使用 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. 您必须允许临时分布式查询

    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 作业

【讨论】:

  • 感谢您的回复但执行后我收到一条错误消息,例如无法处理对象“SELECT * FROM [Sheet1$]”。链接服务器“(null)”的 OLE DB 提供程序“Microsoft.Jet.OLEDB.4.0”表示该对象没有列,或者当前用户对该对象没有权限。请建议..
  • 我假设你想从 Sheet1 中获取数据并且 excel 文件是在服务器上
  • 确保以下几点: 1. Excel 文件在您尝试导入的服务器上 2. Excel 文件中没有任何空格 3. Excel 文件有列名(第一行) 4 . 如果文件已被其他进程使用,请关闭文件
  • 谢谢,它正在创建新表,但下次不追加记录!有什么建议吗?萨马尔
  • 请不要在 cmets 中走得更远。尝试更新您的问题或提出新问题。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 2018-04-13
      • 2013-12-24
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多