none
Llamar a funcion SQL Server desde un flujo de datos. RRS feed

  • Pregunta

  • Buenas tardes.

    En mi datawarehouse tengo un flujo de datos y  necesito llamar a una funcion de sql server (del origen) que devuelve un scalar para hacer unas actualizaciones.

    ¿Con qué herramienta podría hacerlo? 

    No quiero usar servidores vinculados.

    Me gustaría un objeto con su propia conexion al origen y que reciba un flujo de datos y devuelva otro flujo como resultado.

    Gracias de antemano y un saludo.

    lunes, 17 de marzo de 2014 15:20

Respuestas

Todas las respuestas

  • Pues he probado con el OleDBCommand, y el caso es que con una select simple funciona bien pero si le meteo una funcion tal que asi select [dbo].[GetValue] (?,?) as Privacy   da error de sintaxis.

    ¿Alguien sabe algo?

    Muchas gracias.

    miércoles, 19 de marzo de 2014 8:43
  • Hola @Hectorino78

    ¿Necesitas hacer la llamada a la función con valores que contiene el flujo de datos?

    ¿Podrías utilizar un cross apply para llamar a la función al mismo tiempo que el origen? Si el origen no es SQL no podrás, pero si lo es te recomiendo esta opción.

    Si no, tendrías que hacerte un datatable (variable tipo object) con las filas a procesar y luego en un bucle foreach que recorra ese datatable y ejecutar un dataflow que en el origen de datos llame a esa función con los parámetros que necesites de la fila actual (del loop).


    Víctor M. García Sánchez. Hope this help. Please vote if you find this posting was helpful. if this is an answer to your question, please mark it. http://bifase.blogspot.com | http://twitter.com/atharky

    lunes, 7 de abril de 2014 16:26
  • Hola, Victor.

    Gracias por tu respuesta, pero

    ¿cómo puedo mezclar ambos servidores a nivel de SSIS sin usar un servidor vinculado?

    De momento lo he resuelto con un linked server y una Openquery, pero no me parece elegante en absoluto.

    Gracias de antemano y un saludo.

    lunes, 7 de abril de 2014 16:33
  • No puedes a no ser que en la instancia/db donde tengas la función se te permita hacer una tabla temporal. De esta forma harías dos pasos, el primero a modo de staging llevando los datos a la instancia donde esta la función y el segundo paso llamando a esos mismos datos usando el cross apply en el select. 

    Pero se me ocurre otra cosa, ¿para que utilizas la función? ¿no se podría refactorizar en SSIS? 

    Danos algo más de detalle para poder orientarte mejor, el caso es que actualizar el DW con datos de una función de origen... digo, porque igual podrías convertirlo en un select en origen y luego casar con los datos del DW y hacer el update correspondiente... estoy imaginándome cosas :)



    Víctor M. García Sánchez. Hope this help. Please vote if you find this posting was helpful. if this is an answer to your question, please mark it. http://bifase.blogspot.com | http://twitter.com/atharky

    lunes, 7 de abril de 2014 16:40
  • Hola, Victor. Gracias por tu respuesta.

    Pues es una función bastante compleja en la que intervienen calendarios y tal (lo de recrearla en SSIS me parece un poco locura)

    Otra opción sería traerme las tablas implicadas en al función y recrearla en el datawarehouse ¿no?

    Gracias de antemano y un saludo.

    martes, 8 de abril de 2014 11:40

  • Lo de traerte la función al DW, depende. Yo no lo haría porque seguramente es una función de negocio y si varía la función los resultados en el DW ya no serán iguales, tendrías que actualizar el código de la función también. No me parece práctico.

    ¿Para que necesitas los datos del DW en la función que tienes en la fuente? No puedes traerte un dataset en el que ya se aplique la función? Como te comenté en la entrada anterior puedes hacer un select en origen que aplique la función y actualizar el DW con los resultados. Si necesitas algún parámetro del DW lo guardas en alguna tabla intermedia o variable del propio paquete. 


    Víctor M. García Sánchez. Hope this help. Please vote if you find this posting was helpful. if this is an answer to your question, please mark it. http://bifase.blogspot.com | http://twitter.com/atharky

    martes, 8 de abril de 2014 12:05
  • Hola, Victor.

    Creo que entiendo lo que quieres decir, pero,

    En principio, no puedo traerme la consulta con la función "resuelta" , pues necesito pasar unos parámetros que solo están en el DW, un tema de horas y demás.

    Gracias de antemano y un saludo.

    miércoles, 9 de abril de 2014 16:07
  • Pues solo se me ocurre que hagas la llamada a la función en un script component en el dataflow y añadas el resultado como columnas al pipeline.



    Víctor M. García Sánchez. Hope this help. Please vote if you find this posting was helpful. if this is an answer to your question, please mark it. http://bifase.blogspot.com | http://twitter.com/atharky

    martes, 15 de abril de 2014 11:19
  • No me sale la opcion de marcar como respuesta. No se si la han cambiado, es un incidencia o simplemente no la encuentro.
    miércoles, 23 de abril de 2014 15:37