Pregunta

Estoy migrando datos que deben insertarse utilizando procedimientos almacenados que ya existen. Los procedimientos almacenados tienen parámetros y un valor de retorno (de una instrucción select) 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 generalmente uso parámetros de salida en el procedimiento almacenado para manejar & Quot; id & Quot; salida; pero no estoy seguro de cómo se puede manejar esto con 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
¿Fue útil?

Solución

La forma en que descubrí que podía hacer esto, que en realidad era bastante simple:

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

y luego aparecerá un @RETURN_VALUE en las columnas de destino disponibles

Otros consejos

No use los nombres de las variables en la propiedad SqlCommand, solo los signos de interrogación y el " OUT " o " SALIDA " etiqueta 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 tubería antes del comando OLE DB para introducir una columna (asignada a una variable SSIS) para capturar el resultado del procedimiento.

Consulte OLEDB Columnas de transformación e identidad de comandos para Una buena descripción con tapas de pantalla de cómo hacer esto. Consulte también Adaptador de destino de basura para conocer el Destino de 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, debe 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 usar una tabla temporal según su versión de SQL Server.

Siempre he usado la asignación de parámetros dentro de la tarea Ejecutar SQL con mucho éxito. La instrucción SQL es & Quot; EXEC nameofstoredproc?,? OUTPUT & Quot ;, 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, dirección (entrada, salida, Valor de retorno) y tipo de datos. Como su proceso almacenado está devolviendo los datos que desea mediante un conjunto de resultados, especifique la dirección de las variables para recopilar el ID y la versión como Valor de retorno. Debería funcionar bien para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top