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

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

目前,我正在使用一个SSIS包来加载数据,我不得不做大量的调整来获取数据:

  • 所有数字都必须格式化为文本(否则不能正确加载)。
  • 有时数字必须以单引号(')来加载。
  • 如果一列有数字单元格和文本单元格的混合,则文本单元格必须先在文件中出现(否则只有数字加载和文本以NULLforms出现)。
  • 如果用户更改列名称,文件将不会加载。
  • 如果用户更改标签名称,该文件将不会加载。
  • 如果用户添加一个新的列(即使在一个工作表的末尾),该文件将不会加载。
  • 文件中的额外的表是不是一个问题,谢天谢地!
  • date似乎敏感,不pipe它们是否会正确加载。
  • Excel文件的连接string必须包含“IMEX = 1”,否则情况会更糟糕。
  • 计划的SSIS作业必须在64位系统上以32位运行。

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

我必须把所有的要求放在用户如何格式化Excel文件真的很痛苦。 我们通常必须多次发送文件,直到文件加载之前的所有格式化问题都是正确的。 我想消除这种悸动。

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

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

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

你可以试试OpenRowSet:

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

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

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