1

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

目前,我正在使用 SSIS 包来加载数据,我必须进行大量调整才能加载数据:

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

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

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

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

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

或者,我是不是走错了路?我应该使用 SSIS 以外的东西来加载 Excel 电子表格吗?

4

2 回答 2

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$])
于 2012-06-14T23:48:13.830 回答
0

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

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

于 2012-06-15T00:17:45.417 回答