2009-01-28 4 views
7

Я переношу данные, которые необходимо вставить, используя хранимые процедуры, которые уже существуют. Хранимые процедуры имеют параметры и возвращаемое значение (из оператора select) идентификатора для вставленной строки. В команде OLE DB в SSIS я могу вызывать значения столбцов столбцов хранимой процедуры как параметры, и я обычно использую выходные параметры хранимой процедуры для обработки вывода «id»; но я не уверен, как это можно обработать с возвращаемыми значениями, когда процедура использует select для возврата значения id. Вот пример того, что я использовал, перед которыми работает, но мне нужно, чтобы забрать значение, возвращенное из выбора:Возвращаемое значение SSIS хранимой процедуры в команде OLE DB

exec dbo.uspInsertContactAddress 
@Address = ?, 
@ContactID = ?, 
@DeliveryMethodId = ?, 
@ID = ? output, 
@Version = ? output 

ответ

12

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

exec ? = dbo.StoredProc @param = ?, @param2 = ? 

, а затем @RETURN_VALUE появится на поле Доступных столбцов Назначения

6

Не используйте имена переменных в свойстве SqlCommand, только вопросительные знаки и тому «OUT» или «OUTPUT» для выходных параметров.

Трюк для захвата значения выходного параметра заключается в преобразовании производного столбца в конвейере перед командой OLE DB, чтобы ввести столбец (сопоставленный с переменной SSIS), чтобы зафиксировать результат процедуры.

См. OLEDB Command Transformation And Identity Columns для получения хорошего обзора с экранами экрана, как это сделать. Также см. Trash Destination Adapter для адресата корзины, используемого в первой ссылке. Это удобный инструмент, позволяющий отлаживать такие вещи.

+0

Спасибо за ответ, хотя, возможно, я Жду» В моем вопросе я точно объясню, что мне нужно делать. В приведенном выше коде я использовал работы, и я могу захватить значения, если процедура имеет выходной параметр. Проблема в том, что процедуры, используемые для этой базы данных, просто вызывают выбор для получения значения. – bobwah

+0

Прошу прощения, я не уверен, что у меня проблема. Разве вы не передаете результат выбора через выходной параметр, и вам нужен способ захвата результирующего набора proc? –

0

Я всегда использовал сопоставление параметров в SQL-запросе Execute с большим успехом. Заявление SQL - это «EXEC nameofstoredproc?,? OUTPUT», с вопросительными знаками, определяющими расположение параметров и OUTPUT, если параметр является выходом.

Вы указываете параметры в сопоставлении с соответствующим именем переменной, направлением (входным, выходным, ReturnValue) и типом данных. Поскольку ваш сохраненный proc возвращает данные, которые вы хотите получить через результирующий набор, укажите направление для переменных, чтобы получить идентификатор и версию как ReturnValue. Он должен работать отлично для вас.

1

Если хранимая процедура возвращает результирующий набор, то вам нужно, чтобы захватить его:

DECLARE @results TABLE (
    [ID] INT NOT NULL 
) 

INSERT @results ([ID]) 
EXEC dbo.uspInsertContactAddress @Address = ?, @ContactID = ?, @DeliveryMethodId = ?, @ID = ? output, @Version = ? output 

SELECT * FROM @results 

Примечание: Я использовал переменную TABLE. Возможно, вам придется использовать временную таблицу в зависимости от вашей версии SQL Server.

 Смежные вопросы

  • Нет связанных вопросов^_^