如何合并SSIS包文件?

10

我想知道是否有人对合并SSIS的dtsx文件有什么建议。以下是我认为使合并困难的问题:

  • 它们是xml格式,这可能已经很麻烦了。
  • 它们可以嵌入C#脚本,在这种情况下,它们将同时具有C#源代码和dll文件的base64编码字符串。
  • 它们描述了数据包中数据流的流向以及IDE元素的布局。

如果微软有听众,那么将包分成几个文件而不是一个文件可以解决很多问题。一个dtsx可以是描述流程的xml,描述布局的xml,一些.cs源文件和一些dll文件。但实际情况并非如此。让我怀疑为什么会有人使用dtsx。

一个无用的解决方案

我在网上看到的唯一解决方案是确保在编辑dtsx文件时锁定它,以便只有一个用户进行更改。当您只谈论一个分支时,这很有效,但是如果您正在处理各种分支(或者更好的是DVCS),则没有可行的方法可以锁定所有副本以进行更改。除此之外,这并不能真正解决问题,除非您能确保在合并之前没有其他人对其进行更改。

5个回答

8

使用免费的Visual Studio插件BIDS Helper可能会以两种可能的方式帮助您解决困境。

  1. BIML: BIML是商业智能标记语言(BIML参考)。您可以使用.biml文件生成SSIS包。由于其更为严格的结构,BIML文件应该与合并操作更加兼容。虽然我还没有合并它们的经验,但我一直在使用BIML文件比SSIS UI更快地创建我的SSIS包。这对于复制粘贴类似的数据流并仅更改唯一属性非常有帮助。

  2. Smart Diff: BIDS Helper还具有内置的Smart Diff功能,可帮助比较SSIS包中的差异。它不会帮助自动合并,但它将剥离布局信息并在显示差异之前对XML排序。这将向您显示两个SSIS包之间的实际功能差异。然后,您可以使用该信息手动合并更改。对于您在revelator的答案评论中的示例,您将使用Smart Diff将版本1.0的SSIS与1.0分支中的修复版本进行比较,然后您将只看到将该修复程序手动应用于2.0分支所需的更改。


我现在不太做SSIS相关的工作了。但这似乎是一个不错的答案。那个BIML东西看起来会更容易进行差异化比较(尽管任何XML文件都不会很容易)。 - ZombieDev

7

我建议尽可能避免合并dtsx文件 - 这将会是一场灾难!我通常开发SSIS项目的方式是将每个不同的工作部分拆分成单独的包/ dtsx 文件,然后从主包中调用这些文件。这意味着团队中的不同人员可以在不重叠彼此工作的情况下处理不同的包。在源代码控制系统中,这种方法非常有效。另一个优点是每个组件都可以独立执行或测试。


1
我们会将一些内容拆分成较小的包,但是我们的大多数包都完成非常具体的任务,不适合将它们进一步拆分。即使如此,在同一个分支中保持人们不互相干扰只能部分解决问题。例如,我们有一个包可以导入特殊的文件格式。我们发现了一个错误并在软件版本1.0中进行了修复。但是在2.0分支中,import.dtsx的某些部分已经被更改以提高性能或其他原因。这两个更改必须合并,否则当2.0发布时我们会再次遇到该错误。 - ZombieDev

0

如果您需要真正的合并功能,您将不得不手动编写软件包。由于XML中的所有布线(血统ID等)和设计师特定内容,没有办法在文件之间合并更改而不破坏数据流或布局。


这也是我认为的。你不能合并它们。我会将其标记为答案,但实际上只是确认了问题。我不知道是否有一个答案。 - ZombieDev

0

看看BIML转换器。BIML(商业智能标记语言)是一种更轻松的编辑和控制SSIS包的方式。只需下载BIDS助手并查看本文。

http://bimlscript.com/Walkthrough/Details/68

变压器还允许您将相同的更改应用于一组SSIS包,而不仅仅是手动一个接一个地进行。

干杯


目前仅在Mist中可用的功能。 - Doc

0

我们让合并工作的唯一方法是打开两个包,将一个包中的所有内容复制,粘贴到另一个包中,然后编译每个脚本任务(如果它们有冲突)。

建议使用较小的包,因为它们响应更快。


将一个dtsx文件(我们称之为源)的内容复制到另一个文件(我们称之为目标)并保存,并不是合并。这只是丢弃了目标中发生变化的任何内容。如果源和目标都发生了更改,您希望最终结果是两者变化的组合。 - ZombieDev
我在考虑这样合并,合并文件a和b - 不是以源代码控制系统的方式:| 请忽略我的注释。 - cairnz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接