Sunteți pe pagina 1din 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 ... un
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.

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í):

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".


 
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.:

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:

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!):


 
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:

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!

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:


 
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:

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:


 
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:

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.


 
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):

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!):

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:


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

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

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:


 
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 KEY IDENTITY ( 1 , 1 ) ,
ItemName varchar ( 50 ) ,
Price float ,
Quantity int

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í:

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:


 
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:

¡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:

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

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


 
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):

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:

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:

¡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 a su conexión de Excel:

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).

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.

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:

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:

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 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:

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 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:

¡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 ... la nada, ¡de
verdad! Para ello, añada una división condicional a transformar a su flujo de datos:

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 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:

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 (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:

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 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:

¡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 rojo, verá cuál es el problema:

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:

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:

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), y
cambiamos el nombre a' Gire Unicode en varchar '. El siguiente paso es tubería de nuestros datos en él:

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 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:

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:

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 cambiado el
nombre de ella ...).

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

¡Sí! Es cuatro garrapatas de SSIS!

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

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 
 

S-ar putea să vă placă și