Заменить задачу сценария в нескольких пакетах служб SSIS - PullRequest
3 голосов
/ 23 мая 2019

Требуется замена пользовательской задачи сценария во многих пакетах служб SSIS.Мы можем сделать это вручную, но есть 170 пакетов, которые нужно автоматизировать.Код работает, поэтому никаких проблем.При ручной замене задача скрипта не показывает ошибок.

Здравствуйте, у меня около 170 пакетов в службах SSIS.Мне нужно заменить скрипт задачи в каждом пакете.В каждом пакете название задачи одинаково.

Как мы можем динамически заменить код или задачу в каждом пакете, вместо того, чтобы идти в каждую задачу, вставлять новую, извлекать старую и переименовывать новую со старым именем задачи.

Или, что еще лучше, просто замените старый поверх него?Сценарий на самом деле является DDL.

Спасибо.P

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Официального способа сделать это не существует, поскольку одновременное изменение нескольких пакетов не поддерживается в Visual Studio.

Вы можете обойти эту проблему (поскольку пакеты dtsx являются файлами Xml), используя текстовый редактор, чтобы найти и заменить нужный фрагмент кода:

0 голосов
/ 23 мая 2019

Я бы порекомендовал создать пользовательское задание.
Это будет отдельная библиотека dll вне пакета.Вам придется один раз обновить все пакеты, чтобы использовать пользовательскую задачу вместо задачи скрипта, но все будущие изменения будут намного проще - вам придется обновлять только внешнюю DLL, и все пакеты служб SSIS начнут использовать новую.
Разработка пользовательской задачи

Другим поддерживаемым вариантом будет использование библиотеки «Microsoft.SqlServer.Dts» для изменения пакетов с использованием API-интерфейса SSIS.Ваш код будет выглядеть так:

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

...