sql-server - ejemplos - ejecutar procedimiento almacenado sql server
Valor de retorno de SSIS del procedimiento almacenado dentro de un comando OLE DB (4)
Estoy migrando datos que deben insertarse usando procedimientos almacenados que ya existen. Los procedimientos almacenados tienen parámetros y un valor de retorno (de una declaración de selección) de una identificación para la fila insertada. Dentro de un comando OLE DB en SSIS, puedo llamar al procedimiento almacenado pasando valores de columna como los parámetros y usualmente uso los parámetros de salida en el procedimiento almacenado para manejar la salida "id"; pero no estoy seguro de cómo se puede manejar esto con los valores de retorno cuando el procedimiento utiliza una selección para devolver el valor de identificación. Aquí hay un ejemplo de lo que he usado antes, que funciona, pero necesito recoger el valor devuelto por la selección:
exec dbo.uspInsertContactAddress
@Address = ?,
@ContactID = ?,
@DeliveryMethodId = ?,
@ID = ? output,
@Version = ? output
No utilice los nombres de las variables en la propiedad SqlCommand, solo los signos de interrogación y la etiqueta "OUT" o "OUTPUT" para los parámetros de salida.
El truco para obtener el valor del parámetro de salida es colocar una transformación de columna derivada en la canalización antes del comando OLE DB para introducir una columna (asignada a una variable SSIS) para capturar el resultado del procedimiento.
Consulte Columnas de identidad y transformación de mandatos OLEDB para obtener una buena visión general con capturas de pantalla de cómo hacer esto. También vea el adaptador de destino de la basura para el destino de la basura utilizado en el primer enlace. Es una herramienta útil para tener disponible para depurar cosas como esta.
Si el procedimiento almacenado devuelve un conjunto de resultados, entonces necesita capturarlo:
DECLARE @results TABLE (
[ID] INT NOT NULL
)
INSERT @results ([ID])
EXEC dbo.uspInsertContactAddress @Address = ?, @ContactID = ?, @DeliveryMethodId = ?, @ID = ? output, @Version = ? output
SELECT * FROM @results
Nota: utilicé una variable TABLE. Es posible que deba utilizar una tabla temporal según su versión de SQL Server.
Siempre utilicé la asignación de parámetros dentro de la tarea Ejecutar SQL con mucho éxito. La instrucción SQL es "EXEC nameofstoredproc?,? OUTPUT", con los signos de interrogación que especifican la ubicación de los parámetros y OUTPUT si el parámetro es una salida.
Usted especifica los parámetros en la asignación con el nombre de la variable apropiada, la dirección (entrada, salida, ReturnValue) y el tipo de datos. Como el proceso almacenado devuelve los datos que desea a través de un conjunto de resultados, especifique la dirección de las variables para recopilar el ID y la versión como ReturnValue. Debería funcionar bien para ti.
La forma en que encontré pude hacer esto, que en realidad era bastante simple:
exec ? = dbo.StoredProc @param = ?, @param2 = ?
y luego aparecerá @RETURN_VALUE en las Columnas de Destino Disponibles