如何运行 SSIS动态打包?

How to run SSIS packages dynamically?

我们有一个大型生产 MSSQL 数据库(mdf appx.400gb),我有一个测试数据库。所有 tables、索引、视图等彼此相同。我需要确保这两个数据库的 table 中的数据一致。所以我需要每晚从生产中插入所有新行并将所有更新的行更新到测试数据库中。

我想到了使用 SSIS 包通过检查所有 table 中的更新行和新行来使数据一致的想法。我的 SSIS 流程是 ;

我在 SSIS 中分别为每个 table 打包,因为; 有序;

  1. 我在 table 中获取时间戳值,以便获取最后 1 天的行而不是获取整个 table。
  2. 我得到了生产中 table 的行
  3. 然后我使用 'Lookup' 工具将此数据与测试数据库 table 数据进行比较。
  4. 然后我使用条件精灵来判断数据是新的还是更新的。
  5. 如果数据是新的,我将这个数据插入到目的地 5_2。如果数据更新了,那么我更新目的地 table 中的数据。

数据流在图中的MTRule和STBranch包中

问题是,我正在为每个 table 重复创建所有这些单一流程,而我有超过 300 个 table 这样的流程。这需要几个小时:(

我问的是;

SSIS 中有什么方法可以动态地执行此操作吗?

PS:每个 table 都有自己的列和 PK 值,但我的数据流架构始终相同。 . (下)

我认为实现此目的的最佳方法是使用表达式。它们使您能够动态设置源和目标。 一种可能的解决方案如下:

  • 创建一个 table 来存储您所有的 table 名称和 PK 列
  • 定义一个循环遍历此 table 并解析 SQL 语句
  • 的包
  • 调用您的主包并将 stmt 传递给它
  • 使用 stmt 作为数据流的数据源
  • 如果适用,也将目标 Table 作为参数传递(配置中的另一列 table)

这就是我处理几个非常大的 tables 的方式:数据必须从 20 tables 中获取并移动到一个 table.

您可以查看 BiMLScript,它可以让您根据元数据动态创建包。

您最好编写一个将表名作为参数的存储过程并在那里进行 CRUD。

然后在 SSIS 的 FOR EACH 组件中调用存储过程。

为什么需要使用 SSIS?

您最好编写一个将表名作为参数的存储过程并在那里进行 CRUD。然后在 SSIS 的 FOR EACH 组件中调用存储过程。

事实上,您可以使用存储过程并在 SQL 代理作业中安排它来完成所有事情。