Documente Academic
Documente Profesional
Documente Cultură
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 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 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.
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:
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 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.
3
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:
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.
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!
5
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!):
También puede agregar clase-de-los comentarios a los paquetes usando algo llamado anotaciones:
6
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:
7
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.
- 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í:
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 para ejecutarlo
como se muestra. SSIS salvará a su paquete de forma automática antes de ejecutarlo.
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:
9
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.
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:
11
Deja el'Primera fila tiene nombres de columna'opción marcada.
Usted podría cambiar el nombre de este administrador de conexión, pero vamos a dejarlo como está.
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.
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:
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:
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'.
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:
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:
19
Hay un problema con la 'mesa de compras'destino.
El problema es que Excel utiliza datos Unicode, y hemos creado un varchar columna en SQL Server.
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:
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.
24
Haga clic en el paquete en el Explorador de soluciones para ejecutarlo (ojalá que habíamos cambiado el
nombre de ella ...).
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