SSIS возвращает значение хранимой процедуры в команде OLE DB

StackOverflow https://stackoverflow.com/questions/487366

Вопрос

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

exec dbo.uspInsertContactAddress
@Address = ?,
@ContactID = ?,
@DeliveryMethodId = ?,
@ID = ? output,
@Version = ? output
Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

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

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

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

SELECT * FROM @results 

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

Я всегда с большим успехом использовал сопоставление параметров в рамках задачи Execute SQL.Инструкция SQL - это "EXEC nameofstoredproc ?, ?ВЫВОД", с вопросительными знаками, указывающими расположение параметров и вывод, если параметр является выводом.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top