Задача SSIS «Выполнение SQL-запроса» не может найти хранимую процедуру

Я работаю над существующим пакетом SSIS, чтобы добавить к нему настраиваемое ведение журнала. Я пытаюсь проверить это, и у меня есть задача «Выполнение SQL», которую я не создавал, и которая получает следующую ошибку.

Выполнение запроса

"ap_pfl_DropProfileTables"

не удалось со следующей ошибкой:

"Не удалось найти хранимую процедуру 'ap_pfl_DropProfileTables'.". Возможные причины сбоя: Проблемы с запросом, неправильно задано свойство "ResultSet", неправильно заданы параметры или неправильно установлено соединение.

Я понятия не имею, почему я получаю эту ошибку, потому что:

  1. Я не создавал это и не изменял, и этот пакет работает без ошибок в производстве.
  2. Сохраненный процесс просто усекает две таблицы. У него нет набора результатов или параметров.
  3. Соединения работают правильно, потому что этот хранимый процесс выполняется одновременно с другим потоком, выполняющим задачу потока данных, которая выполняется успешно и использует только два соединения в этом пакете.
  4. Я дважды и трижды проверил базу данных, чтобы убедиться, что хранимая процедура там и написана правильно. Я даже проверил регистр букв в хранимой процедуре.

Любые идеи о том, как это исправить?


person nleidwinger18    schedule 08.02.2013    source источник
comment
Вы уверены, что ваша строка подключения указывает на правильное местоположение? Существует ли sproc в данной схеме? Имеет ли учетная запись, выполняющая sproc, правильные разрешения для доступа к нему?   -  person Goose    schedule 08.02.2013
comment
Строка подключения удобна, потому что задача потока данных, которая выполняется в то же время, использует то же подключение и успешно завершается без ошибок. Я использую учетную запись системного администратора, поэтому да, у нее есть доступ. Хранимая процедура создается под dbo   -  person nleidwinger18    schedule 08.02.2013
comment
Изменились ли параметры в какой-либо момент и/или правильно ли они сопоставлены?   -  person Goose    schedule 08.02.2013
comment
Я проверил базу данных, к которой подключается Execute SQL Task, и там существует хранимая процедура. Я могу запустить хранимую процедуру из SQL Server Management Studio, и она работает.   -  person nleidwinger18    schedule 08.02.2013
comment
Нет параметров. Хранимая процедура просто усекает две таблицы.   -  person nleidwinger18    schedule 08.02.2013
comment
Что произойдет, если вы измените запрос на exec dbo.ap_pfl_DropProfileTables?   -  person Pondlife    schedule 08.02.2013
comment
Я заставил его работать. Я просто создал новое соединение и настроил его точно так же, как соединение, которое я использовал изначально, и оно сработало. Я понятия не имею, почему это сработало, но это сработало. Спасибо!   -  person nleidwinger18    schedule 08.02.2013
comment
Возможно, кто-то может ответить на этот вопрос, чтобы объяснить результаты, которые вы нашли. Однако спасибо, что сообщили нам :)   -  person Tim Post♦    schedule 11.02.2013
comment
Возможно, в вашем неправильном соединении было выражение, которое оценивается динамически, что может быть неочевидно на поверхности проектирования служб SSIS. Один из способов убедиться в этом — использовать SQL Profiler для мониторинга базы данных, к которой, как вы ожидаете, будет выполняться запрос, и убедиться, что он действительно работает с ожидаемой базой данных. Что-то еще, что вы могли бы сделать, это извлечь соединения из XML SSIS и сравнить их визуально и посмотреть, не отличается ли что-то.   -  person Nick.McDermaid    schedule 11.02.2013


Ответы (4)


Да, это неприятно, но выполнимо. Ключ в том, чтобы НЕ использовать диспетчер соединений ADO.NET, а вместо этого использовать старый добрый диспетчер соединений ADO. Второй ключ НЕ использовать EXEC или EXECUTE в свойстве SQLStatement редактора Execute SQL Task. Просто введите имя хранимой процедуры (также для надежности используйте соглашение об именах из трех частей database.schema.storedprocedure. )

Я не пробовал это с параметрами хранимой процедуры. Кроме того, я не пробовал это с диспетчером соединений OLE DB.

person user1160841    schedule 04.11.2013

Я знаю, что это старый поток, но я только что столкнулся с этой проблемой при использовании SSIS в SQL 2008 R2.

Для меня с подключением ADO.NET мне действительно пришлось установить IsQueryStoredProcedure на False, после чего ошибка исчезла. Неважно, использовал я EXEC или нет.

person joehanna    schedule 18.06.2015

Я сам столкнулся с этим, и вот что я сделал (с подключением ADO.NET)

В поле SQLStatement я помещаю имя своей хранимой процедуры (dbo.myStoredProc). Затем я установил для свойства IsQueryStoredProcedure значение «True».

Я думаю, что когда для IsQueryStoredProcedure установлено значение true, объект автоматически добавляет EXEC, чтобы определить, что команда является вызовом хранимой процедуры.

person xwraith    schedule 10.12.2013

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

Конкретно моя ситуация:

  1. Мне нужно использовать ADO.Net, потому что я работаю с SQL Azure.
  2. Я хочу зафиксировать возвращаемое значение хранимой процедуры

Сначала я попробовал это:

В SQLStatement я помещаю имя процесса (без EXEC)

myschema.MyProc;

В IsQueryStoredProcedure я поставил False

В ResultSet я поставил None

На вкладке Сопоставление параметров я поместил

Variable Name      Direction    Data Type    Parameter Name   Parameter Size
User::MyVariable  ReturnValue     Int32            0                 -1

Это выполняется без ошибок, но не фиксирует возвращаемое значение.

Я предполагаю, если вы установите для параметра IsQueryStoredProcedure значение true, все это должно быть правильно подключено. Но вместо этого возвращает ошибку.

Это https://technet.microsoft.com/en-us/library/cc280502(v=sql.110).aspx, говорит, что для захвата возвращаемого значения при использовании ADO.Net «Set IsQueryStoreProcedure имеет значение True». Но он возвращает ошибку, которая является OP

В качестве обходного пути я сделал это:

DECLARE @R INT
EXEC @R = MySchema.MyProc;
SELECT @R

Я оставил для IsQueryStoredProcedure значение False.

Я установил ResultSet в однострочный

Я удалил сопоставления параметров и вместо этого сопоставил набор результатов:

Result Name  Variable Name
     0          User::MyVariable
person Nick.McDermaid    schedule 26.03.2018