19

Estoy tratando de crear un paquete SSIS que consulte datos de una tabla y llame a un procedimiento almacenado en otra base de datos con cada fila.¿Cómo se llama un procedimiento almacenado en SSIS?

En mi viejo paquete DTS, yo estaba haciendo esto:

EXEC myStoredProcedure ?, ?, ? 

... y luego Me asignan los parámetros. Sin embargo, en SSIS, no puedo encontrar la manera de hacer que esto funcione.

Tengo una tarea de flujo de datos, que primero ejecuta una consulta para los datos. Pasa los datos a un destino OLE DB. Configuré el modo de acceso a datos en "comando SQL", pero cuando trato de poner el SQL anterior, obtengo el "Conteo de Parámetros Inválidos" cuando analiza el SQL. No puedo acceder a la pantalla Asignaciones. ¿Algunas ideas?

+1

¿Por qué una tarea tan simple parece tan compleja con las utilidades de transferencia de datos de MS? Esto fue fácil de hacer en DTS, dado que tomó tiempo establecer asignaciones inútiles. –

+0

Estoy seguro de que puede hacerlo a nivel de "flujo de datos", de hecho estoy seguro de haberlo hecho, pero no recuerdo cómo. ¿Cómo se supone que, por ejemplo, ejecute un PROCESO INSERT para búsquedas fallidas? –

Respuesta

13

en el flujo de datos, la OLE DB Command se puede utilizar para ejecutar una instrucción SQL para cada fila en un flujo de datos - (MSDN documentation)

Alternativamente, se puede almacenar el resultado fuente situada en una variable del tipo de datos de objetos y utilice un contenedor Foreach Loop en el flujo de control (ejemplo here).

+0

Creo que esto funciona, pero estoy recibiendo un error de conversión Unicode ... y no estoy seguro de cómo solucionarlo. –

+0

Difícil de ser cierto sin un poco más de detalle. ¿Su SP toma los parámetros char o varchar? –

+0

... que deberían ser parámetros char y/o varchar –

7

Tendrá que utilizar una tarea Ejecutar SQL. En la sección SQLStatement, puede agregar el código para ejecutar el procedimiento almacenado.

Para pasar parámetros, use? sintaxis y especifique los parámetros en la sección "Correlación de parámetros".

Un buen ejemplo se puede encontrar here.

+0

Entonces, ¿cómo paso los datos en la tarea SQL de ejecución? No veo ningún parámetro útil en la sección de parámetros. Solo los parámetros "System :: xxxxx". –

+0

Ese ejemplo no me ayuda, ya que son solo 2 escenarios específicos. Específicamente, estoy tratando de ejecutar una instrucción select y pasar cada fila a un procedimiento almacenado en otro servidor. Sabes como hacer esto? –

+0

^Funciona. Debe definir sus PROPIAS variables, no usar las variables de nivel del SISTEMA. Debería utilizar una "tarea Ejecutar SQL" en la sección Flujo de control de su paquete. Abra el editor de Variables y en la esquina superior izquierda, agregue sus propias variables de nivel de USUARIO. – D3vtr0n

Cuestiones relacionadas