Git 如何通过BIML对SSIS包进行大规模更新?

Git 如何通过BIML对SSIS包进行大规模更新?,git,ssis,biml,Git,Ssis,Biml,以下是我遇到的问题: 假设我使用BIML生成(剔除)50多个SSI包。。。 为了简单起见,假设它们各自只有一个执行SQL任务 Package1 -> SQL Audit (INSERT INTO auditTable(val1) values ?) Package2 -> SQL Audit (INSERT INTO auditTable(val1) values ?) ... Package50 -> SQL Audit (INSERT INTO auditTable(val

以下是我遇到的问题:

假设我使用BIML生成(剔除)50多个SSI包。。。 为了简单起见,假设它们各自只有一个执行SQL任务

Package1
-> SQL Audit (INSERT INTO auditTable(val1) values ?)
Package2
-> SQL Audit (INSERT INTO auditTable(val1) values ?)
...
Package50
-> SQL Audit (INSERT INTO auditTable(val1) values ?)
现在,我对每个包进行特定于包的更改

Package1
-> SQL Audit (INSERT INTO auditTable(val1) values ?)
-> Add Dataflow: DFT Stage Data
Package2
-> SQL Audit (INSERT INTO auditTable(val1) values ?)
-> Add Expression: EXP SET Variable Value
...
Package50
-> SQL Audit (INSERT INTO auditTable(val1) values ?)
-> Add Script: SCT Call Webservice
此时,我已经使用BIML模板创建了50个包,其中包含
(插入auditTable(val1)值?

但是我得到了一个新的要求,在auditTable(val1,val2)中存储第二列
(插入auditTable(val1,val2)值?,?)

所以我使用更新的BIML模板重新生成我的包1->50。。。但是,在这样做的过程中,我丢失了所有特定于包的定制(添加数据流、添加表达式等)

所以我的问题是…

处理这个问题最简单的方法是什么

据我所知,我的选择如下:

  • 找到一种使用版本控制(git或tfs)有选择地将文件旧版本的特定部分合并到更新模板中的方法吗?这能做到吗?怎么做
  • 维护每个包的临时副本,并复制/粘贴、重新连接已擦除的组件
  • 是否有办法配置BIML,使其只覆盖包的某些部分(而不是整个内容)

**我知道有更好的方法来设计这个。。。例如,一个更适合未来的存储过程,而不是一个插入到中的
,但我只感兴趣的是回答核心问题,即如何在覆盖以前版本的文件后,有选择地合并该文件的特定部分。

通过Biml生成SSIS包是一个全有或全无的练习。biml编译器知道如何将biml转换为dtsx。没有工具可以生成dtsx,然后将其与另一个dtsx进行比较和合并。假设封装的真实形状编码在Biml中

你所采取的方法所面临的挑战是,你已经将自己与生成过程割裂开来——当我知道我做了同样的事情时,你所做的事情没有受到任何影响。一种更为Biml ic的方法是修改原始Biml,使用元数据和条件来塑造单个包

那么,你现在能做什么

1) 将最终软件包反向工程到Biml中。这是现在内置的免费双字印刷机产品,所以它只是重复,而不是一个成本因素。在Biml中拥有所有包后,可以枚举所有包节点,查找与目标匹配的执行SQL任务并修复它们。如果它真的像审计,我会从我所有的个人软件包中提取出来,并将其作为每个软件包的“包含”。这样,当第三次更改时,您只需进行一次更改并重新发出SSIS包

另外一个想法是使用BimlStudio并允许重新定义executesql任务节点,但这会让您回到付费方式。此处链接了使用转换器更新值的示例


2) 发出一个包,该包具有正确的执行SQL任务和所有关联的绑定,然后选择您选择的选项来编辑包中的文本。我喜欢TextPad/WildEdit,但只要它能找到这段文本并替换为新的文本块,任何东西都可以工作。

感谢您的简要解释!听起来,将BIML作为源代码,将包作为构建文件(逆向工程选项)将是理想的方案。。。只是需要团队的支持!(虽然还没有标记为答案,以防其他人有一个版本控制的聪明解决方案)。。。
Package1
-> SQL Audit (INSERT INTO auditTable(val1,val2) values ?,?)
Package2
-> SQL Audit (INSERT INTO auditTable(val1,val2) values ?,?)
...
Package50
-> SQL Audit (INSERT INTO auditTable(val1,val2) values ?,?)