【问题标题】:Arbitrary Column Count SQL Data Set (SQL Server Integration Services [SSIS])任意列计数 SQL 数据集(SQL Server 集成服务 [SSIS])
【发布时间】:2023-04-08 14:45:01
【问题描述】:

背景:

我正在尝试迭代 .sql 文件列表,执行每个文件,将每个查询的结果保存到一个特殊命名的分隔文本文件中。现在,我使用一个完全独立的 C# 程序来实现这一点。我是 SSIS 新手,但我非常擅长 C#。在我将要工作的 IT 部门继续前进,SSIS 是首选解决方案,因此将其全部放入一个巨大的脚本操作中(遗憾的是)不是解决方案。

问题:

下面是我的控制流的图片。

想要的效果如下:

  1. Foreach 循环遍历一个包含 .sql 文件的文件夹。
  2. Load SQL 任务将当前 .sql 文件的内容分配给一个变量。

    (这两个步骤都有效)

  3. 数据流任务:

    1. 执行变量 AND 中的 SQL!
    2. 将任意大小的结果保存到变量或文件中。
  4. (返回控制流:)缺失:使用不同的分隔符和不同的文件名保存报告。

  5. 上传报告执行 WinSCP 以抓取文件并将其放入 n > 1 个指定位置。

问题:

如何让数据流不关心列数?例如,报告 1 有 5 列,报告 2 有 50,报告 3 有 25。所有这些都可以。我不在乎它有多少列,在这种情况下我真的不太关心元数据。

我可以用 C# 做到这一点,只需说“这是一个数据表,填充它”。 SSIS 显然缺乏这种适应列数的能力。是的?不?说搞砸了,只是用脚本对象来做?在这里做什么的公认智慧是什么?

如果这个问题揭示了对 SSIS 工作原理的一些基本误解,也请随时发表评论。

提前致谢!

【问题讨论】:

  • 如果您已经知道如何使用,请编写脚本。具有任意列的 SSIS 在 2008 年很困难。我不知道那个版本。

标签: c# sql-server ssis dataflow


【解决方案1】:

我会放弃这整个方法 - 这不是 SSIS 的成功之路。

SSIS 缓存数据流元数据(例如列、数据类型,甚至数据类型精度),元数据的更改通常意味着包设计的更改。

相反,我会构建一个包含 3 个数据流任务或尽可能多的变体(每个“报告”/SQL 脚本一个)的 SSIS 包。每个数据流任务内部都有一个 OLE DB 源和一个平面文件目标。

这种优势在运行时变得很明显 - SSIS 可以并行执行许多数据流任务(默认设置为 # cores * 2),并且与 C# 相比以惊人的速度输出文本文件数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2014-05-03
    • 1970-01-01
    • 2016-02-22
    相关资源
    最近更新 更多