Вы можете сделать это, используя параметр Output. Сначала создайте переменную SSIS, которая будет содержать значение. Я собираюсь использовать имя, которое у вас уже есть, и назвать эту переменную [User::ReturnRowsEffectedA]
. Вам не понадобится @ReturnRowsEctedA в реальном запросе. Вы можете сохранить большую часть текста запроса, но замените @ReturnRowsEffectedA
в вызове sp_execute на ?
, чтобы обозначить, что мы собираемся использовать переменную параметра SSIS. Выполненный вами запрос SQL будет выглядеть следующим образом:
-- These are passed values in SSIS as paramaters
DECLARE @VariablePassedForSelect AS VARCHAR(50) = ?
DECLARE @ScriptToExecute NVARCHAR(MAX) = ?
-- this MAY (or may not) return a result set as dynaic code
exec sp_executesql @ScriptToExecute, N'@VariablePassedForSelect BIGINT, @ReturnRowsEffected INT OUTPUT', @VariablePassedForSelect = @VariablePassedForSelect, @ReturnRowsEffected = ? OUTPUT
Затем в вашем Parameter Mapping
вы добавите третью запись (первые два будут вашими входными параметрами, которые подают @VariablePassedForSelect и @ScriptToExecute) , Вы будете использовать [User::ReturnRowsEffectedA]
в качестве Variable Name
, установить Direction
на Output
и изменить Parameter Name
на 2
. Вы можете оставить тип данных равным LONG
, а размер - -1
.
Я создал пример в своей системе, чтобы проиллюстрировать, как это работает: Вот мой запрос. Я не передаю в сценарий, для простоты. Но он все еще использует входной и выходной параметры.
Здесь вы можете видеть, что ResultSet
установлено на None
:
Только Execute SQL Task
использует один параметр, поэтому Parameter Name
здесь 0
.
Я приостановил выполнение после завершения задачи, чтобы вы могли видеть, что [User::ResultVar]
заполнено значением 1
, которое является ожидаемым значением здесь.
Редактировать: чтобы добавить результаты про c в переменную типа объекта в SSIS, сначала нужно создать переменную типа объекта, а затем d установите для свойства ResultSet
значение Full result set
, а затем сопоставьте результаты с переменной.