none
DUDA SSIS CON SQL SERVER 2005 RRS feed

  • Pregunta

  • Buenos días,

    Recientemente he empezado a trabajar con SSIS, y la versión de SQL que tienen en el servidor es la 2005.

    Me han asignado un proyecto de automatización para una serie de tareas que actualmente son manuales (extracción de datos y combinar tablas de excel).

    Hay un caso, que parece muy sencillo, hasta que empiezan a aparecer los problemas por todas partes: Unir dos excel distintos, con 2 campos comunes, en una única tabla dentro de SQL (Una vista también me sirve...).

    Hasta aquí bien, a pesar de algún problemilla que encontré por el camino...pero bien.

    El problema que me encuentro ahora esta relacionado con lo de siempre, el factor humano y su bonita costumbre de cambiar la estructura de las tablas sin avisar...

    Pensé en hacer una sentencia "SELECT * INTO tabla_SQL FROM tabla_excel" pero no me sirve...o no consigo que funcione.

    Alguién podría decirme si es posible ejecutar dicha sentencia desde SSIS???

    O darme alguna alternativa para crear una tabla dinámica dentro de SQL, cogiendo datos del excel (incluidos los nombres de las cabeceras) y por supuesto, que sea válida en SQL SERVER 2005??

    PD: en su momento he probado con sentencias tipo OPENROWSET pero no hay manera... siempre muestra el mismo error, y creo que es devido al acceso limitado a la carpeta TEMP, o al menso esa el única opción queme queda porque el resto de opciones que podian dar error ya las descarté.

    Muchas gracias de antemano!


    SarayAC



    • Editado SAC93 martes, 21 de marzo de 2017 12:54
    martes, 21 de marzo de 2017 12:20

Todas las respuestas

  • La sentencia en cuestion no es una sentencia valida. Deberia ser algo asi como:

    INSERT INTO table_destino (col1, col2, col3)
    SELECT col1, col2, col3
    FROM table_fuente

    Pero en SSIS el patron comun para importar archivos es usar una coneccion al archivo fuente, en dependencia del tipo, y tener otra coneccion al archivo destino y entre ellas cualquier tarea de manipulacion.

    Ejemplos:

    https://www.simple-talk.com/sql/ssis/importing-excel-data-into-sql-server-via-ssis-questions-you-were-too-shy-to-ask/

    http://www.sqlshack.com/using-ssis-packages-import-ms-excel-data-database/


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    martes, 21 de marzo de 2017 12:59
  • usando SSIS tu formato de destino ha de ser invariante y has de usar un oledb destination, por ejemplo.

    Si quieres usar el select into puede hacerlo creando servidores vinculados en sql server a tus hojas de Excel.. sin usar para nada SSIS, (a mi no me gusta como solución, pero funciona)


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    martes, 21 de marzo de 2017 13:03
    Moderador
  • Muchas gracias por tu respuesta Miguel Ejea Gómez,

    También he intentado hacer servidores vinculados, y me los crea, pero a la hora de ejecutar la sentencia (ya sea SELECT...INTO, OPENROWSET u OPENDATASOURCE)  Me muestra el siguiente error:

    Msg 7302, Level 16, State 1, Line 16
    Cannot create an instance of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "Prueba_Excel".

    Es más, al hacer un OPENROWSET sin servidor vinculado, el error es el mismo pero en vez de poner el nombre del servidor vinculado, pone "null"...

    Muchas gracias!


    SarayAC

    martes, 21 de marzo de 2017 14:12
  • Muchas gracias Hunchback,

    En este caso me ocurre lo mismo que le he dicho a Miguel Ejea Gómez...

    Intento ejecutar esa sentencia y el error es el mismo...

    Msg 7302, Level 16, State 1, Line 16
    Cannot create an instance of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "Prueba_Excel".

    Es más, el error es el mismo si intento ejecutar cualquiera de esas sentencias desde SSIS...

    Como veo que mediante cualquiera de esas sentencias obtengo siempre el mismo resultado fallido, he intentado hacer diferentes cosas desde SSIS...pero sigo teniendo el problema de como actuar en caso de que la estructura cambie.

    Conseguí crear un "estandar" para evitar que se salten columnas si agregan una nueva...pero no es algo muy efectivo, ya que lo que hago es cargar el excel en uno genérico (un excel con 50 campos que se llaman campo_01, campo_02...), y una vez cargado el excel genérico, hacía la conversión de datos y lo almacenaba en una tabla idéntica del servidor. Esto algo que sirve para no tener que mapear y cambiar el tipo de dato una y otra vez siempre que se cambie el excel, pero haciendolo de esta manera pierdo las cabeceras....

    Muchas gracias por tu respuesta!!


    SarayAC

    martes, 21 de marzo de 2017 14:20
  • - Probastes desde tu maquina de desarrollo para ver si al menos puedes abrir el archivo en SSIS mediante una coneccion de archivo?

    - Si el problema esta en el lado del servidor, entonces asegurate que los drivers necesarios han sido installado.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas

    martes, 21 de marzo de 2017 14:39
  • Hola Hunchbakc,

    Si, he probado desde el propio servidor (con conexión de escritorio remoto) y también desde local, pero apuntando siempre a la misma BBDD y el error es siempre el mismo.

    En el servidor estan instalados el paquete de SQL Server 2005 y los Add-in de Microsoft Access Databse engine 2010...si mal no recuerdo. Y el servidor como tal es un Windows Server 2008 R2...

    No sé si sería necesario instalar algo mas o no...

    Gracias de nuevo!


    SarayAC

    martes, 21 de marzo de 2017 14:57
  • Hola Saray, eso tiene pinta de que es porque el driver que tienes instalado está en 32 o 64 bits pero tu server SQL está en lo opuesto. Tienes que instalar el driver de Excel en las dos versiones, pero eso no deja.. así que debes intentar intenbtar instalar de 2 versiones de Excel distintas

    en este artículo escribí como

    http://portalsql.com/index.php/2015/10/importando-ficheros-excel-con-integration-services/


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    • Propuesto como respuesta Joyce_ACModerator martes, 21 de marzo de 2017 21:15
    • Votado como útil SAC93 miércoles, 22 de marzo de 2017 7:16
    martes, 21 de marzo de 2017 16:44
    Moderador
  • Hola Miguel Egea, lo cierto es que antes de publicar el post en el foro ya había leido tu artículo...

    Actualmente, desde SSIS, puedo leer cualquier fichero de Excel (ya sea *.xls o *.xlsx) y acabo de comprobarlo..y efectivamente en "extended properties" tengo puesto excel 12.0...por eso no entiendo porque si lee los ficheros a través de SSIS, no me permite hacerlo directamente mediante código...

    Es decir, si es una versión de Excel anterior a 2007, lo puedo leer mediante el "Excel Connection Manager" y si es posterior, a través de conexión OLE DB, pero sólo mediante SSIS, lo que no me permite crear una tabla dinámica... y si pruebo a ejecutar el código dentro de un "execute SQL task", me muestra el mismo error que ejecutando el código desde SQL Server...

    Realmente me he mirado mil foros y webs...pero esq no consigo dar con el problema y me está volviendo loca.....!!!

    Aun así, muy buen post!! Gracias!!


    SarayAC

    miércoles, 22 de marzo de 2017 7:24