【问题标题】:How to import multiple Excel columns into single SQL Server column?如何将多个 Excel 列导入单个 SQL Server 列?
【发布时间】:2011-11-22 07:25:37
【问题描述】:

我们将来自不同来源的大量数据文件(主要是 Excel,有时是 CSV)导入 SQL Server 数据库。数据文件有一些公共字段(姓名、地址等),通常还有其他字段——一些我们需要/使用,一些我们不需要。

如何导入文件中的所有数据 - 将常用/必填字段插入相关列,同时将其他剩余列合并到单个列(文本或 varchar(max))?这可能吗?我不介意 Excel/SQL Server 的版本。

所以我可能会收到一个源文件,例如

FirstName, LastName, AddressLine1, City, ColumnE, ColumnF, DateColumn, ColumnH

这在 SQL Server 中存储为

FirstName nvarchar(25)
LastName nvarchar(25)
AddressLine1 nvarchar(50)
City nvarchar(30)
OtherData nvarchar(max)

当然,OtherData 列需要包含一些分隔符来标识导入的 Excel 列。

我们只需要使用“通用”列,但是当我们导出数据(通常只是原始行的一个子集)时,我们可以更轻松地包含 OtherData,而不是创建自定义表用于每个不同的数据文件或与 Excel 合并。


编辑:我可以通过在数据文件中添加许多额外的列作为自定义分隔符来实现这一点,然后使用 BULK INSERT,但这非常耗时。

【问题讨论】:

  • 您导入数据的具体情况如何?您使用的是 SSIS 还是 BULK Insert 还是什么?
  • 通常是 SSIS(或导入向导)——大多数时候它是来自新源(不同客户端)的全新数据文件,我们要么忽略很多“其他数据”,要么创建专门用于此数据文件的表。我们的任务不需要“其他数据”,但是当返回给客户端时,我们经常需要将其缝合在一起。我想知道是否有比创建有时要导入的 30-50 个额外冗余列或我们之后使用 Excel 跳过的箍更简单的方法。

标签: sql-server excel


【解决方案1】:

作为一个粗略的想法,如果您知道 excel 中的选项卡名称,则可以使用 C# 和 OLE DB/JET 12 驱动程序将数据读入数据集(基本上是 SELECT * FROM [tabname])。 CSV 可以更简单地加载。此时,只需将其打入数据库即可。

如果你对这种方法感兴趣,我今晚可能会写出一些伪代码。

【讨论】:

  • 是您将所有内容抓取到内存中的方法(从 [tabname] 中选择 *) - 然后您确定常用列并将其余列合并到单个“blob”中?
  • 我假设我有一个预定义的常见列列表,但除此之外,这将是我的一般方法。
猜你喜欢
  • 1970-01-01
  • 2015-03-08
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多