Сбой SSIS 2017 «Выполнить задачу SQL» Не удалось найти хранимую процедуру

#sql #sql-server #ssis #ado.net #execute-sql-task

#sql #sql-server #ssis #ado.net #execute-sql-task

Вопрос:

Я использую SSIS с ADO.NET подключение к Azure. В SSIS я хочу выполнить процедуру с одним входным и 2 выходными параметрами. Входным параметром является статическое значение. Процедура работает с T-SQL в SSMS.

Я настраиваю «Выполнить задачу SQL» следующим образом

Общая информация

  • SQLStatement: METRICE_VAULT.GP_1001_GENERIC_PRE_PROCESS 2, @INSTANCE, @PROCESS_STATUS
  • IsQueryStoredProcedure: True
  • ConnectionType: ADO.NET
  • Набор результатов: Нет
  • SQLSourceType: прямой ввод

Сопоставление параметров
введите описание изображения здесь

введите описание изображения здесь

Когда я выполняю «Выполнить задачу SQL», я получил следующую ошибку

Необходимо объявить скалярную переменную «@». Возможная причина сбоя: проблема с запросом, свойство «ResultSet» установлено неправильно..

Обновить

После добавления имени параметров я получаю следующую ошибку:

Ошибка выполнения задачи SQL]: выполнение запроса «METRICE_VAULT.GP_1001_GENERIC_PRE_PROCESS 2, @INS …» завершилось ошибкой со следующей ошибкой: «Не удалось найти хранимую процедуру ‘METRICE_VAULT.GP_1001_GENERIC_PRE_PROCESS 2, @INSTANCE ,@PROCESS_STATUS'». Возможные причины сбоя: проблемы с запросом, свойство «ResultSet» отсутствуетустановлено правильно, параметры установлены неправильно или соединение установлено неправильно.

Ответ №1:

Ниже приведен способ настройки ваших параметров и свойств. Установите для свойства IsQueryStoredProcedure значение True, и вместо записи exec ProcName вам просто нужно указать ProcName в sqlstatment, если вы используете ADO.NET Связь.

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Спасибо за комментарий! Я корректирую вопрос. Теперь я получаю другое сообщение об ошибке!

2. @Erikhoeven Вы изменили свойство IsQueryStoredProcedure на True?

3. Да, я изменил его на true

4. @Erikhoeven Можете ли вы подтвердить, используете ли вы только имя процедуры в SQLStatement вместо EXECUTIVE ProcedureName ?

Ответ №2:

Измените направление ваших параметров на ВВОД.

Комментарии:

1. В OP упоминалось, что I want to execute a procedure with one input and 2 output parameters

2. Если у вас есть ВЫХОДНЫЕ параметры, то результирующий набор не должен быть NONE.

3. Это неверно, ВЫХОДНЫЕ параметры не связаны с результирующим набором. (Набор результатов и параметры вообще не связаны!)

Ответ №3:

Поскольку вы используете ADO.NET Вы должны указать имя параметра. В качестве примера:

 METRICE_VAULT.GP_1001_GENERIC_PRE_PROCESS 2,@param1, @param2
  

И не используйте индекс параметра на вкладке сопоставления параметров, как показано на скриншоте.

Дополнительная информация

Вы можете обратиться к следующей официальной документации для получения более подробной информации и примеров:

Обновление 1

Попробуйте использовать полное имя:

 <database name>.<schema name>.<stored procedure name> 
  

Или добавьте USE <database> команду перед выполнением хранимой процедуры.

Комментарии:

1. Спасибо за комментарий! Я корректирую вопрос. Теперь я получаю другое сообщение об ошибке!

2. @Erikhoeven Попробуйте использовать полное имя: <database name>.<schema name>.<stored procedure name> или добавьте USE <database> команду перед выполнением хранимой процедуры.