【问题标题】:ssis export from excel to sql independently of the number of columnsssis 从 excel 导出到 sql,与列数无关
【发布时间】:2019-01-09 16:45:50
【问题描述】:

我找不到这个问题的答案,我认为这很容易:)

使用 SSIS,我想从 excel 导入 SQL 表,与列数无关,我不在乎折衷是 3 列还是 33 列。

如何完成这样的事情:select * into mytable from exceldataset,

如果不能使用 OPENROWSET 函数并执行 SQL 任务。

【问题讨论】:

  • 您能否指出您需要获得的预期结果?我有一个评估列的想法,但我不知道这是否是您需要的。
  • 好的,Excel 有 3 列(A、B、C),我想在数据库中有一个包含 ABC 列的表。经过一些计算,我将删除此表。下次我有 5 列的 excel,然后我想从这 5 列中创建一个表(选择 * 到 ..)...
  • 一个简单的选择是在进程之前重新创建目标表......或者如果您想保留历史信息? IF OBJECT_ID('mytable','U') IS NOT NULL DROP TABLE mytable
  • 每次我想创建表,因为不是每次excel都有相同数量的列。
  • @NeshaSerbia 为什么不能使用OPENROWSETExecute SQL Task??我认为这是您无需以编程方式创建包或使用 BIML 即可完成此操作的唯一方法。或者您必须将 Excel 文件转换为 csv 文件并导入

标签: sql sql-server excel ssis etl


【解决方案1】:

这个问题已经回答过很多次了。在 SSIS 中,源的元数据与包一起存储。它不能改变。做到这一点的唯一方法是以编程方式更改包中的数据源定义,这显然不是微不足道的。您需要一个脚本任务并深入研究 API。更容易更改源文件,无论是在 Excel 中通过展平、反透视或任何需要的方式,还是在生成它的系统中。

查看this question 不是为了答案,而是为了一些指示。它实际上处理不同的文件,而不是列。

【讨论】:

    【解决方案2】:

    实现这一目标的最简单方法是将Execute SQL Task 与动态OPENROWSET 命令一起使用。

    由于您提到您不能使用此方法,我认为您必须使用 Script Task 将 Excel 文件转换为 csv 文件,然后将平面文件导入 SQL。

    您可以参考以下链接了解更多信息:

    使用脚本任务将 Excel 转换为 csv

    导入不同标题的平面文件

    如果您的 Excel 文件具有相同的列号但标题是变量

    其他有用的文章


    如果您不想要其中一种方法,则必须以编程方式生成包或为每个 Excel 文件使用 BIML,因为 SSIS 需要验证 Excel 文件的元数据并且不支持多个 Excel 结构使用相同的 Excel 源导入

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 2014-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-02
      相关资源
      最近更新 更多