用于将数据加载到SQL Server数据库的Excel有什么更好的替代方法?

时间:2012-06-14 22:45:26

标签: sql-server excel ssis

将电子表格加载到SQL Server数据库时遇到了很多麻烦。

目前,我正在使用SSIS包来加载数据,我不得不进行大量调整以获取要加载的数据:

  • 所有数字必须格式化为文本(否则无法正确加载)。
  • 有时候数字必须以单引号(')开头才能加载它们。
  • 如果列中包含数字单元格和文本单元格,则文本单元格必须位于文件中(否则只有数字加载,文本才会显示为NULL)。
  • 如果用户更改列名,则不会加载该文件。
  • 如果用户更改了标签名称,则不会加载该文件。
  • 如果用户添加新列(即使在工作表的末尾),也不会加载该文件。
  • 文件中的额外页面不是问题,谢天谢地!
  • 日期似乎很敏感,无论它们是否能正常加载。
  • Excel文件的连接字符串必须包含“IMEX = 1”或更糟糕的事情。
  • 即使在64位系统上,预定的SSIS作业也必须以32位运行。

我一直在将数据(通常是每个文件200,000-500,000行)加载到一个表中,所有字段都定义为nvarchar。然后,在加载时,我将SSIS包的下一步中的数据传输到带有类型数据字段的工作表。

我必须向用户提出有关如何格式化Excel文件的所有要求真的很痛苦。我们通常必须多次发送文件,直到所有格式问题都正确才能加载文件。我想消除这种鞭挞。

我知道我不是唯一一个面临这类问题的人。所以,我必须问......

将数据加载到SQL Server数据库有什么更好的Excel替代方法?

或者,我是否采取了错误的方式?我应该使用SSIS以外的东西来加载Excel电子表格吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试OpenRowSet:

SELECT *
INTO SomeTable
From OpenRowSet('Microsoft.Jet.OLEDB.4.0', 
    'Excel 8.0;Database=\\servername\c$\filename.xls;HDR=YES;IMEX=1', [Sheet2$])

答案 1 :(得分:0)

不是一个SQL答案,而是一个简单的答案:

您可以要求用户将数据复制并粘贴到Excel电子表格中,其中除了要包含的数据字段之外的所有内容都被锁定。这将防止描述的许多痛点。