替换多个SSIS包中的脚本任务

时间:2019-05-23 04:55:06

标签: c# dll ssis script-task ssis-2017

自定义脚本任务需要替换为许多SSIS软件包。 我们可以手动完成,但是有170个软件包需要自动化。 代码有效,所以没有问题。 手动替换后,脚本任务不会显示任何错误。

您好,我在SSIS中大约有170个软件包。我需要在每个软件包中替换一个任务脚本。在每个软件包中,任务的名称都是相同的。

我们如何动态地替换每个程序包中的代码或任务,而不必进入每个任务就将新任务或任务放入新任务,取出旧任务并用旧任务名称重命名新任务。

还是更好,只需将旧的替换为旧的?该脚本实际上是一个DDL。

谢谢。 P

2 个答案:

答案 0 :(得分:1)

没有正式的方法,因为Visual Studio不支持一次更改多个程序包。

您可以通过使用文本编辑器查找并替换所需的代码段来解决此问题(因为dtsx包是Xml文件)

答案 1 :(得分:0)

我建议创建一个自定义任务。
它将是软件包外部的一个单独的dll库。您将必须一次更新所有软件包以使用自定义任务而不是脚本任务,但是所有将来的更改将变得更加简单-您将仅更新外部dll,并且所有SSIS软件包将开始使用新的dll。 > Developing a Custom Task

其他受支持的选项是使用“ Microsoft.SqlServer.Dts”库通过SSIS API修改程序包。您的代码将如下所示:

Imports Microsoft.SqlServer.Dts.Runtime  
Imports Microsoft.SqlServer.Dts.Tasks.FileSystemTask  
Imports Microsoft.SqlServer.Dts.Tasks.BulkInsertTask  

Module Module1  

  Sub Main()  

    Dim p As Package = New Package()  
    ' Add a File System task to the package.  
    Dim exec1 As Executable = p.Executables.Add("STOCK:FileSystemTask")  
    Dim thFileSystemTask1 As TaskHost = CType(exec1, TaskHost)  
    ' Add a Bulk Insert task to the package.  
    Dim exec2 As Executable = p.Executables.Add("STOCK:BulkInsertTask")  
    Dim thFileSystemTask2 As TaskHost = CType(exec2, TaskHost)  

https://docs.microsoft.com/en-us/sql/integration-services/building-packages-programmatically/adding-tasks-programmatically?view=sql-server-2017