Возвращаемое значение служб SSIS хранимой процедуры в команде OLE DB - PullRequest
8 голосов
/ 28 января 2009

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

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

Ответы [ 4 ]

12 голосов
/ 04 февраля 2009

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

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

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

6 голосов
/ 28 января 2009

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

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

См. Столбцы преобразования и идентификации команд OLEDB для хорошего обзора с заголовками экрана, как это сделать. Также см. Адаптер пункта назначения корзины для пункта назначения корзины, использованного в первой ссылке. Это удобный инструмент для отладки подобных вещей.

1 голос
/ 30 января 2009

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

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.

0 голосов
/ 30 января 2009

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

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

...