Как выполнить пакет служб SSIS из хранимой процедуры SQL Server и передать аргументы - PullRequest
4 голосов
/ 07 мая 2019

Я пытаюсь выполнить пакет служб SSIS с помощью хранимой процедуры.

Я могу успешно выполнить эту хранимую процедуру, только когда параметры жестко заданы (как описано в первой версии кода).)

Первая версия кода:

SELECT @Cmd = 'DTexec /F "C:\ssis\tool\package1.dtsx" 
                      /SET "\Package.Variables[User::ConfigurationName].Properties[Value]";"Report1" 
                      /SET "\Package.Variables[User::Country].Properties[Value]";"USA" 
                      /SET "\Package.Variables[User::OrgDepartment_Team].Properties[Value]";"USA" 
                      /SET "\Package.Variables[User::Subfix].Properties[Value]";"20190503" 
                      /SET "\Package.Variables[User::TeamName].Properties[Value]";"Team1"'

В базе данных создается запись

Но приведенный ниже код не работает (я передаю те же значения параметров)

Вторая версия кода:

SELECT @Cmd = 'DTexec /F "C:\ssis\tool\package1.dtsx" 
                      /SET "\Package.Variables[User::ConfigurationName].Properties[Value]";"' + @ConfigurationName + 
                   '" /SET "\Package.Variables[User::Country].Properties[Value]";"' + @Country + 
                   '" /SET "\Package.Variables[User::OrgDepartment_Team].Properties[Value]";"' + @OrgDepartment_Team +
                   '" /SET "\Package.Variables[User::Subfix].Properties[Value]";"' + @Subfix + 
                   '" /SET "\Package.Variables[User::TeamName].Properties[Value]";"' + @TeamName + '"'

Нет ошибки, но в базе данных также не создано ни одной записи.

DTExec: Пакетвыполнение вернулось DTSER_SUCCESS (0).

Буду признателен за любую помощь:)

1 Ответ

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

Попытка выяснить проблему

Похоже, вы используете рабочий синтаксис, но я приведу несколько советов, которые могут помочь решить проблему:

(1) Обработка NULL

Убедитесь, что ни одна из переменных, используемых в команде, не содержит значений NULL, что может привести к тому, что значение объединенной строки будет NULL. Для решения проблемы можно использовать ISNULL().

SELECT @ConfigurationName = ISNULL(@ConfigurationName,'') , 
       @Country = ISNULL(@Country ,'') ,
       @OrgDepartment_Team = ISNULL(@OrgDepartment_Team,'') ,
       @Subfix  = ISNULL(@Subfix ,'') ,
       @TeamName = ISNULL(@TeamName,'')

(2) Обработка котировок

Я предпочитаю, чтобы в переменные вместо основной строки были включены кавычки. Для этого вы можете использовать функцию QUOTENAME():

SELECT @ConfigurationName = QUOTENAME(ISNULL(@ConfigurationName,''),'"') , 
       @Country = QUOTENAME(ISNULL(@Country ,''),'"') ,
       @OrgDepartment_Team = QUOTENAME(ISNULL(@OrgDepartment_Team,''),'"') ,
       @Subfix  = QUOTENAME(ISNULL(@Subfix ,''),'"') ,
       @TeamName = QUOTENAME(ISNULL(@TeamName,''),'"')

SELECT @Cmd = 'DTexec /F "C:\ssis\tool\package1.dtsx" 
                      /SET "\Package.Variables[User::ConfigurationName].Properties[Value]";' + @ConfigurationName + 
                   ' /SET "\Package.Variables[User::Country].Properties[Value]";' + @Country + 
                   ' /SET "\Package.Variables[User::OrgDepartment_Team].Properties[Value]";' + @OrgDepartment_Team +
                   ' /SET "\Package.Variables[User::Subfix].Properties[Value]";' + @Subfix + 
                   ' /SET "\Package.Variables[User::TeamName].Properties[Value]";' + @TeamName 

(3) Отчетность

Вы можете прочитать весь журнал пакета, добавив в команду ключевое слово /Rep EWIP:

SELECT @Cmd = 'DTexec /F "C:\ssis\tool\package1.dtsx" /Rep EWIP '

/ Rep [orting] уровень [; event_guid_or_name [; event_guid_or_name [...]]: (Необязательно). Указывает, какие типы сообщений сообщать. Доступны следующие варианты отчетов для уровня:

N Нет отчетов.

E Сообщается об ошибках.

W Сообщается о предупреждениях.

I Сообщаются информационные сообщения.

C Сообщаются о пользовательских событиях.

D Сообщается о событиях задачи потока данных.

P Сообщается о прогрессе.

V Подробные отчеты

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...