Está en la página 1de 26

Cargando datos desde Excel a SQL Server - 10 pasos a seguir

SQL Server Integration Services proporciona una forma versátil de leer archivos de Excel en SQL Server. Una tarea como ésta ilustra las ventajas del método gráfico de SSIS. Andy Brown explica.

Es necesario crear un paquete para importar datos de un libro de Excel en una tabla de SQL Server,

utilizando SQL Server Integration Services como una herramienta. ¿Que podría salir mal? Bueno

montón, como resulta. El objetivo de este artículo es ayudar a la gente a evitar todas las trampas que caí en la primera vez que el aprendizaje de SSIS.

un

Este artículo utiliza SSIS 2012, la versión más reciente en el momento de la escritura, pero no se dará cuenta de muchas diferencias si está usando el 2008 o 2005. El artículo se supone que está utilizando SQL Server Data Tools - Business Intelligence dentro de Visual Studio 2012 para crear paquetes SSIS:

Business Intelligence Development Studio (BIDS) se utilizó hasta que SQL Server 2012. Microsoft tienen todo un departamento dedicado a pensar nombres engañosos para el software?

Nuestro ejemplo sencillo

Supongamos que desea importar un libro de Excel de las compras en una tabla de SQL Server (se puede descargar este libro aquí):

tabla de SQL Server (se puede descargar este libro aquí): Nuestro libro de la compra del

Nuestro libro de la compra del libro mayor, con 2 filas de título no deseados completos, una fila de encabezado útil y un par de filas en blanco torpes en la parte inferior.

Usted podría utilizar Excel para eliminar manualmente las dos primeras filas de título y parte inferior dos filas en blanco para hacer la vida más fácil, pero esto podría ser una especie de trampa (y también una especie de sentido, ya que cualquier aplicación produce el libro de Excel de las compras que acaba de volver a crear el deseado filas próxima vez que corrían él). Citando las palabras de Caifás en el musical Jesucristo Superstar: "necesitamos una solución más permanente a nuestro problema".

1

Esto es lo que nos gustaría nuestra mesa final de SQL Server pa ra contener:

Esto es lo que nos gustaría nuestra mesa final de SQL Server para contener: los 5 compras.

Antes de empezar, asegúrese de que ha cerrado su libro de Excel hacia abajo. Si ejecuta cualquier paquete SSIS para importar datos de un libro de Excel que está abierto, usted recibirá algunos mensajes de error terriblemente engañosas.

Paso 1 - Crear un proyecto

Antes de que usted puede jugar alrededor con los datos (lo siento: extraer, transformar y cargar él), se necesita un proyecto para hacerlo en Entre en Herramientas de datos de SQL Server o Visual Studio, y luego optar por crear un nuevo proyecto.:

Visual Studio, y luego optar por crear un nuevo proyecto.: Es posible que pueda perder la

Es posible que pueda perder la oportunidad de este paso si sólo has ido en SSIS por primera vez.

En la parte superior del cuadro de diálogo que aparece, asegúrese de crear el tipo adecuado de proyecto:

aparece, asegúre se de crear el tipo adecuado de proyecto: Elija crear un proyecto SSI S

Elija crear un proyecto SSIS inteligencia de negocios.

A continuación, puede dar a su proyecto un nombre emocionante (al menos, más emocionante que Integration Services Project1, que es lo que he usado!):

2

Elija un nombre y una ubicación para su nuevo paquete. SSIS ahora va a crear

Elija un nombre y una ubicación para su nuevo paquete.

SSIS ahora va a crear un nuevo proyecto, y también (por defecto) un nuevo paquete también, imaginativamente llamado Package.dtsx. Hay dos maneras que usted puede ver que esto es lo que ha pasado. Una es que se puede ver el paquete en el Explorador de soluciones:

se puede ver el paquete en el Explorador de soluciones: El nuevo paquete creado en su

El nuevo paquete creado en su nombre (si usted no puede ver el Explorador de soluciones, seleccione 'Ver SolutionExplorer' desde el MENÚ para demostrarlo).

La otra pista que SSIS ha creado un paquete para usted es que usted está mirando en la cara!

un paquete para usted es que usted está mirando en la cara! Por defecto se le

Por defecto se le pone en control de flujo de vista, que es como un diagrama de flujo que muestra la secuencia en que las tareas que se crean se ejecutarán.

Paso 2 - Crear una conexión a la base de datos de SQL Server

Antes de continuar, es necesario asegurarse de que ha creado una conexión con la base de datos de SQL Server. Para ello, primero haga clic derecho en los "gestores de conexiones 'parte de Explorador de soluciones:

3

Haga clic para crear un nuevo administrador de conexión. La forma más eficiente para vincul

Haga clic para crear un nuevo administrador de conexión.

La forma más eficiente para vincular a SQL Server utiliza un administrador de conexión OLEDB:

a SQL Server utiliza un ad ministrador de conexión OLEDB: Seleccione para agregar un admi nistrador

Seleccione para agregar un administrador de conexión OLE DB.

Ahora haga clic en el "Nuevo

" botón para crear su nuevo administrador de conexión:

4

Crear un nuevo administrador de conexión que el anterior. Elija su servidor, el método de

Crear un nuevo administrador de conexión que el anterior.

Elija su servidor, el método de autenticación y la base de datos en la siguiente pantalla, seleccione 'Aceptar' dos veces para ver a su nuevo administrador de conexión de la lista:

para ver a su nuevo administr ador de conexión de la lista: Tiene sentido para crear

Tiene sentido para crear este administrador de conexión para todo el proyecto, ya que lo más probable es que va a utilizar la misma conexión en otros paquetes dentro del mismo proyecto.

No he mostrado más detalles sobre esto aquí por dos razones: la configuración serán diferentes en su equipo, ¡y cualquiera que lea este artículo es probable que tenga conexiones creadas muchas otras veces en muchas otras aplicaciones de software!

Paso 3 - Crear una tabla

No se pueden importar datos a una tabla inexistente, por lo que la siguiente cosa que vamos a hacer es crear la tabla que se muestra a continuación. Podríamos hacerlo manualmente dentro de SQL Server Management Studio, pero que estamos buscando una solución automatizada que podemos correr una y otra vez, así que en lugar vamos a crear la tabla como parte de nuestro paquete de SSIS.

5

Nuestra mesa se verá algo como e sto: vamos a importar el nombre del artículo,

Nuestra mesa se verá algo como esto: vamos a importar el nombre del artículo, precio y cantidad, pero el id de compra se generará automáticamente. En cuanto al total de la columna E de nuestra hoja de cálculo - sólo tendremos que elegir no importar que, puesto que puede ser recreado por la multiplicación de los precios y de cantidad columnas en cualquier momento.

Para crear la tabla, primero haga doble clic (o haga clic y arrastre) en el 'Ejecutar SQ L' tarea para agregar una tarea para el flujo de control que debe ser visible en la pantalla (que queremos crear la tabla shell dentro de esta tarea):

(que queremos crear la tabla shell dentro de esta tarea): Esta tarea se ejecuta rá alguna

Esta tarea se ejecutará alguna SQL para eliminar cualquier tabla compras existente, y crear una nueva.

Tiendo a dar a mis tareas nombres largos y descriptivos (¡frikis pueden preferir usar nombres sin sentido más cortos!):

pueden preferir usar nombres sin sentido más cortos!): La tarea Ejecutar SQL despué s de cambiarle

La tarea Ejecutar SQL después de cambiarle el nombre.

También puede agregar clase-de-los comentarios a los paquetes usando algo llamado anotaciones:

6

Usted puede hacer clic para ag regar una anotación a su paquete - aparecen como

Usted puede hacer clic para agregar una anotación a su paquete - aparecen como notas post-it:

una anotación a su paquete - aparecen como notas post-it: De todos modos, volviendo a la

De todos modos, volviendo a la historia principal, ahora puede editar su ejecución SQL tarea:

principal, ahora puede editar su ejecución SQL tarea: La forma más fácil de c orregir cualquier

La forma más fácil de corregir cualquier tarea SSIS es hacer doble clic en su icono, aunque también puede

hacer clic derecho sobre la tarea y seleccione 'Editar

"que el anterior.

En el cuadro de diálogo que aparece, seleccione para conectarse a su base de datos, utilizando el administrador de conexión que acaba de crear a nivel de proyecto:

7

Puede utilizar un admin istrador de conexión a nivel de proyecto en cualquier paquete. Ahora

Puede utilizar un administrador de conexión a nivel de proyecto en cualquier paquete.

Ahora puede introducir el SQLStatement propiedad, especificando el SQL que SSIS debe ejecutar para esta tarea. Esto es lo que he usado para este artículo.

SI EXISTE (SELECCIONAR 1 DE INFORMATION_SCHEMA.TABLES donde nombre_tabla como 'tblPurchase') DROP TABLA tblPurchase

- Crear una mesa para celebrar la compra del libro mayor items CREATE TABLE tblPurchase (

)

PurchaseId int PRIMARY ItemName varchar ( 50 ) , Price float , Quantity int

KEY

IDENTITY ( 1 , 1 ) ,

Esto primero borrar cualquier tabla llamada tblPurchase que ya existe, y luego crear una nueva, vacía. El PurchaseId columna es una identidad, que se llevará de forma automática los valores 1, 2, 3, etc. Aquí es lo que el Excecute SQLcuadro de diálogo tarea ahora se ve así:

el Excecute SQL cuadro de diálogo tarea ahora se ve así: La propiedad SQLStatement como aparece

La propiedad SQLStatement como aparece después de pegar en el texto.

Es tiempo ahora para probar que esto funciona mediante la ejecución de su paquete de una sola tarea:

8

Haga clic derecho en el nombre del paquete en el Explorador de soluciones y seleccione

Haga clic derecho en el nombre del paquete en el Explorador de soluciones y seleccione para ejecutarlo como se muestra. SSIS salvará a su paquete de forma automática antes de ejecutarlo.

Si todo va bien, debería ver esto:

antes de ejecutarlo. Si todo va bien, debería ver esto: ¡La marca verde significa que las

¡La marca verde significa que las cosas iban bien!

Si el paquete no se ejecuta en este momento, usted puede estar tratando de ejecutarlo en un equipo de 64 bits. El modo por defecto en SSIS en una instalación de 64 bits de SQL Server es de 64 bits. En este caso, usted tiene que cambiar específicamente el modo de ejecutar un paquete. Yo no quiero saturar este artículo con una explicación de cómo hacer esto así que por favor consulte este artículo (http://sqlblog.com/blogs/john_paul_cook/archive/2010/03/24/running-32-bit-ssis-in-a-64-bit- environment.aspx ) para saber cómo hacer esto.

Ahora debería tener una mesa, que se puede ver en SQL Server Management Studio si debe así lo desea:

ver en SQL Server Ma nagement Studio si debe así lo desea: ¡La tabla no tiene

¡La tabla no tiene registros en - todavía!

Ahora tendrá que detener el paquete en ejecución:

9

Seleccione la opción de menú (o pulsar la combinación de teclas arriba) para detener su

Seleccione la opción de menú (o pulsar la combinación de teclas arriba) para detener su paquete en ejecución, ¡y adiós a las garrapatas verdes por ahora!

Ahora es el momento de crear las tareas de flujo de datos - aunque primero tenemos que crear una conexión de Excel.

Paso 4 - Crear una conexión de Excel

Antes de poder importar datos de un libro de Excel, usted tendrá que crear una conexión con él. Probablemente debería crear esta conexión dentro de su paquete, ya que es probable que este va a ser un hecho aislado (no será necesario utilizar la misma conexión en cualquier otro paquete):

utilizar la misma conexión en cualquier otro paquete): Haga clic derecho en el 'Administradores de

Haga clic derecho en el 'Administradores de conexión' sección de su paquete, y optar por crear una nueva conexión.

10

Tenga en cuenta que usted podría utilizar alternativamente la "Fuente Asistente 'para hacer esto, pero siempre me gusta hacer las cosas de forma explícita:

pero siempre me gusta hacer las cosas de forma explícita: El asistente de la fuente que

El asistente de la fuente que aparece en la caja de herramientas de SSIS - no es el Voldemort de magos, pero no es el Dumbledore tampoco.

Ahora puede optar por crear una conexión de Excel:

Ahora puede optar por cr ear una conexión de Excel: ¡Hay algunas otras opciones! Vaya a

¡Hay algunas otras opciones!

Vaya a su libro de Excel y elegirlo:

11

Deja el 'Primera fila tiene nombres de columna' opción marcada. Al seleccionar 'OK', debe consultar

Deja el'Primera fila tiene nombres de columna'opción marcada.

Al seleccionar 'OK', debe consultar a su conexión de Excel:

'OK', debe consultar a su conexión de Excel: Usted podría cambiar e l nombre de este

Usted podría cambiar el nombre de este administrador de conexión, pero vamos a dejarlo como está.

Paso 5 - Crear una tarea del flujo de datos

Es tiempo ahora para comenzar el trabajo de verdad! Queremos añadir una tarea de flujo de datos a la ficha de flujo de control de su paquete. Esta nueva tarea de flujo de datos debe importar datos desde el libro de Excel en la tabla de SQL Server (aunque, como veremos, las cosas pueden ir mal en esta etapa).

como veremos, las cosas pueden ir mal en esta etapa). Añadir un "flujo de datos" tarea

Añadir un "flujo de datos" tarea de su paquete, y cambiarle el nombre a decir 'Importar datos' (como antes).

12

Ahora tendrá que conseguir las dos tareas que se muestran a correr en secuencia; usted en primer lugar, desea crear una nueva tabla para sostener sus compras y, a continuación, importar los datos en ella. Para ello, haga clic en la primera tarea y arrastre su flecha en el segundo. Esta flecha se llama una restricción de precedencia.

Esta flecha se llama una restricción de precedencia. Conexión de las tareas, por lo que siga

Conexión de las tareas, por lo que siga en el uno del otro.

Ahora puede hacer doble clic en la tarea de flujo de datos para editar lo que hace - vamos a pasar el resto de este artículo en la ficha de flujo de datos de SSIS:

de este artículo en la ficha de flujo de datos de SSIS: El (aún vacío) ficha

El (aún vacío) ficha Flujo de datos para la tarea Importar datos.

Paso 6 - Creación de la fuente de Excel

Datos tiene que venir de alguna parte, y en nuestro caso es de Excel:

que venir de algu na parte, y en nuestro caso es de Excel: Arrastre una Fuente

Arrastre una Fuente de Excel desde la caja de herramientas de SSIS en la ventana de su flujo de datos vacía (aquí también hemos cambiado el nombre y luego él).

Ahora puede hacer doble clic en esta fuente para editarlo, y decirle a SSIS donde debe obtener sus datos de:

13

SSIS adivinará automáticamente el administrador de conexión si sólo tiene un administrador de conexión de

SSIS adivinará automáticamente el administrador de conexión si sólo tiene un administrador de conexión de Excel para este paquete / proyecto, pero usted todavía tiene que elegir el nombre de la hoja (como se muestra arriba).

Es una buena idea ahora una vista previa de los datos, haciendo clic en la 'Vista previa

"botón:

datos, haciendo clic en la 'Vista previa "botón: Tenemos problemas obvios con nues tros 2 primeros

Tenemos problemas obvios con nuestros 2 primeros y el último 2 filas, pero podemos resolver estas perdiendo ninguna fila para el que la primera columna es nulo, lo cual nos va a hacer en breve mediante una división condicional transformar.

Es una buena idea ahora renombrar todas las columnas, para que sepa lo que se refieren a:

14

Haga clic en el 'Columnas pestaña' (como se muestra arriba), a continuación, dar las col

Haga clic en el 'Columnas pestaña' (como se muestra arriba), a continuación, dar las columnas de salida mejores nombres, como lo hemos hecho aquí.

Al seleccionar 'OK', usted debe tener una fuente de Excel sin errores mostrados por ello:

usted debe tener una fuente de Excel sin errores mostrados por ello: ¡Ahora, para hacer al

¡Ahora, para hacer algo con estos datos!

15

Paso 7 - Extracción de Rubbish datos

La siguiente cosa que queremos hacer es desviar todas las compras con nulos para verdad! Para ello, añada una división condicional a transformar a su flujo de datos:

la nada, ¡de

condicional a transformar a su flujo de datos: la nada, ¡de Añadir una División condicional que

Añadir una División condicional que el anterior (en este caso hemos cambiado el nombre, también, de perder los nulos), y dirigir la salida (o "camino de flujo de datos", si desea que el nombre técnicamente correcto) de la Excel supuesto en ella.

Ahora puede hacer doble clic en la 'División condicional' tarea para configurarlo. Vamos a configurar dos flujos fuera de él:

Datos en la columna id es nula bajarán un tubo llamado 'Caso 1' (que no vamos a conectar en realidad para nada); mientras

Todos los demás datos fluirán por un tubo llamado 'OK datos'.

He aquí cómo instalar esto:

16

Configurar una salida (llamado 'Caso 1' por defecto), que pone a pr ueba la condición

Configurar una salida (llamado 'Caso 1' por defecto), que pone a prueba la condición de que el Id columna es nulo. Puede arrastrar el ISNULL función y Id columna hacia abajo en el 'Estado' caja para evitar tener que escribir en.

En la parte inferior de este cuadro de diálogo puede escribir un nombre para su salida por defecto:

puede escribir u n nombre para su sa lida por defecto: Aquí hemos llamado la salida

Aquí hemos llamado la salida por defecto 'OK datos'.

Paso 8 - Tubería el 'OK datos' en una tabla de SQL Server

Debemos estar recibiendo cerca del final de nuestro viaje ahora - todo lo que deberíamos tener que hacer es enviar los buenos datos en nuestra mesa compras. He aquí cómo hacerlo:

17

Añadir un destino de OLE DB (co mo se muestra arriba) - aquí est amos

Añadir un destino de OLE DB (como se muestra arriba) - aquí estamos nosotros hemos cambiado el nombre como ‘Mesa de Compras'.

Ahora puede arrastrar la flecha verde de los "Pierdes los nulos 'transformar en las compras de destino tabla:

nulos 'transformar en las compras de destino tabla: Al soltar la flecha, se le pedirá que

Al soltar la flecha, se le pedirá que la salida está eligiendo: 'Caso 1' o 'Aceptar Data' (las dos salidas de la división condicional). Seleccione 'Aceptar datos'.

Tener datos mapeados en la tabla de las compras, ahora es tiempo para configurarlo. Haga doble clic en el "Compras tabla 'destino para editarlo:

18

En primer lugar, elegir el adm inistrador de conexión de usar (a unque es probable

En primer lugar, elegir el administrador de conexión de usar (aunque es probable que no tenga que hacer esto, como SSIS le asignará automáticamente si sólo tienes uno), y la tabla para apuntar.

Ahora puede elegir qué columnas de Excel a mapa en el que las columnas de la tabla de SQL Server:

a mapa en el que las c olumnas de la tabl a de SQL Server: ¡Ten

¡Ten cuidado - el artículo columna causará un problema pronto

!

Esto es lo que le dejó mirando al elegir 'OK':

19

Hay un problema con la 'mesa de compras' destino. Si el cursor sobre el círculo

Hay un problema con la 'mesa de compras'destino.

Si el cursor sobre el círculo rojo, verá cuál es el problema:

cursor sobre el círculo roj o, verá cuál es el problema: El problema es que Excel

El problema es que Excel utiliza datos Unicode, y hemos creado un varchar columna en SQL Server.

Paso 9 - Identificar y Resolver el Problema de conversión de datos

Al crear columnas en SQL Server, puede utilizar cualquiera nvarchar o varchar para cadenas de longitud variable:

nvarchar o varchar para cadenas de longitud variable: El varchar tipo de datos utiliza la mitad

El varchar tipo de datos utiliza la mitad de la cantidad de bytes que nvarchar usos, ya que no puede almacenar caracteres extendidos. ¡Podríamos haber utilizado nvarchar y evitado este problema!

20

La ventaja de usar Unicode es que le permite almacenar caracteres internacionales: en la actualidad más de 110.000 caracteres diferentes de más de 100 guiones, según Wikipedia.

Sin embargo, hemos utilizado varchar, por lo que necesitamos para convertir nuestros personajes Excel Unicode en las normales. Para ello se puede utilizar una 'conversión de datos' tarea. En primer lugar, sin embargo, tenemos que romper el vínculo que hemos creado:

embargo, tenemos que ro mper el vínculo que hemos cre ado: Haga clic en el vínculo

Haga clic en el vínculo entre la transformación y el destino y elimínelo.

Ahora puede agregar en una "conversión de datos 'tarea:

21

Aquí hemos añadido una "conversión de datos 'tarea (que se muestra seleccionada a la izquierda),

Aquí hemos añadido una "conversión de datos 'tarea (que se muestra seleccionada a la izquierda), y cambiamos el nombre a' Gire Unicode en varchar '. El siguiente paso es tubería de nuestros datos en él:

El siguiente paso es tubería de nuestros datos en él: Pipe el 'Data OK' de la

Pipe el 'Data OK' de la división condicional se transforman en esta conversión de datos aún más a transformar.

Ahora puede hacer doble clic en el "Turn Unicode en varchar 'tarea de conversión de datos, y decir lo que debe hacer:

22

Aquí hemos elegido para crear una nueva columna llamada ItemVarchar, que toma el artículo de

Aquí hemos elegido para crear una nueva columna llamada ItemVarchar, que toma el artículo de la columna y la convierte en una cadena no Unicode utilizando la página de códigos ANSI predeterminada.

También he cambiado la longitud de 50 caracteres en este punto. Esto significa que las cadenas más largas de 50 caracteres serán truncadas, dando lugar a errores de truncamiento. Tratar con ellos es más allá del alcance de este artículo - por ahora es suficiente tener en cuenta que ninguna de las descripciones de compra es lo suficientemente largo para nuestro ejemplo nos causan ningún tipo de preocupaciones.

¡Cerca de allí! Ahora puede disfrutar de la salida de esta tarea de conversión de datos y darle de comer a la mesa de compras de destino:

di sfrutar de la salida de esta tare a de conversión de dato s y darle

23

Todavía tenemos un error, ya que no hemos hecho de nuevo las asignaciones de columnas para el destino.

Ahora puede hacer doble clic en la tabla de compras destino para configurar las asignaciones de columnas:

destino para configurar las asignaciones de columnas: Elija para asignar la nueva derivada ItemVarchar columna

Elija para asignar la nueva derivada ItemVarchar columna sobre la ItemName columna en la tabla de SQL Server.

Todos sus errores ya deberían haber desaparecido, ¡y se puede ejecutar el paquete!

Paso 10 - Ejecución del paquete

El último paso es la importación de sus datos mediante la ejecución del paquete:

24

Haga clic en el paquete en el Explorador de soluciones para ejecutarlo (ojalá que habíamos

Haga clic en el paquete en el Explorador de soluciones para ejecutarlo (ojalá que habíamos cambiado el

nombre de ella

).

Esto es lo que el flujo de datos debe ser similar a:

). Esto es lo que el flujo de datos debe ser similar a: ¡Sí! Es cuatro

¡Sí! Es cuatro garrapatas de SSIS!

Ahora debería tener 5 compras en su tblPurchase tabla:

debe ser similar a: ¡Sí! Es cuatro garrapatas de SSIS! Ahora debería tener 5 compras en

25

OK, habría sido más rápido que escribir en esta ocasión, pero ahora tengo un paquete que puede ejecutar cada fin de mes, y que va a trabajar si hay 5 compras o 500.000.

Conclusión

Integration Services es una de esas aplicaciones de software que es un placer de usar. Espero que esto te ha animado a utilizarlo para automatizar el movimiento de datos en torno a su empresa. ¡No hay nada tan satisfactorio como ver las garrapatas verdes aparecen al lado de todas las tareas en sus paquetes cuando se ejecutan!

26