Sugerencia para la importación masiva de datos


8

Estamos trabajando en un proyecto que requiere importar datos de una hoja de cálculo de Excel a diario. Los datos se importarán desde la plantilla predefinida y lo que estamos pensando, primero cargaremos los datos en la tabla temporal y realizaremos la operación de limpieza (eliminar información innecesaria, agregar nuevas filas en la tabla principal y obtener su FK, etc.).

  • Necesito saber si hay alguna herramienta o utilidad disponible que pueda reducir nuestros esfuerzos.
  • ¿Cuál es la mejor manera de INSERTAR registros masivos de diferentes fuentes (principalmente de hojas de cálculo Excel)?

La aplicación que vamos a crear es una aplicación basada en la web donde el usuario tiene un control limitado sobre el servidor SQL. El usuario cargará el archivo a través del navegador y el resto de la operación se realizará en el lado del servidor.
kodvavi 01 de

Respuestas:


9

SSIS es el camino a seguir en esto. Si nunca antes ha creado un paquete y sabe que sus archivos de origen (lea también: hojas de cálculo) siempre serán los mismos, lo que puede hacer es usar el asistente de Importar / Exportar de SQL Server. En SSMS, haga clic con el botón derecho en la base de datos y seleccione Tareas> Importar (o Exportar) Datos ...

Esto abre un asistente que lo guía a través de los pasos para seleccionar sus archivos de origen / destino, así como las tablas de destino (puede crear tablas si aún no existen). Tendrás que mapear qué columnas van a dónde, pero el asistente es bastante sencillo. Cuando haya terminado, le pedirá que ejecute o guarde el paquete (o que haga ambas cosas). Guarda el paquete. Esto guardará su paquete en formato .dtsx si elige guardarlo en el sistema de archivos. Su otra opción es guardar el paquete en el propio SQL Server, que luego los mantendría en la base de datos del sistema msdb.

Una vez que haya guardado su paquete, puede crear un trabajo de Agente SQL para ejecutar ese paquete periódicamente (usted especifica la programación) para que siempre pueda cargar sus tablas usando SSIS. Si desea obtener más información sobre SSIS, consulte los seminarios web gratuitos de mi empresa (cubrimos toda la pila de BI) en PragmaticWorks


En realidad, estamos creando una aplicación basada en la web para que no permitamos que el usuario acceda directamente a la interfaz de la base de datos. Nuestra aplicación primero importa el archivo y luego hacemos el resto de la operación a través de nuestra aplicación.
kodvavi 01 de

1
@kodvavi; puede invocar paquetes SSIS a través del código .net ...
gbn

1
@kodvavi, no estoy seguro de lo que quieres decir con esa declaración. Las aplicaciones web generalmente no tienen el trabajo de iniciar una carga de datos de todos modos, ¿por qué eso importaría? La parte ETL de la base de datos y la interfaz de la aplicación web son dos cosas diferentes.
SQLChicken

Sé que muchas personas inician paquetes SSIS desde la web, pero para mí parece una mala idea, dado cuánto pueden salir mal las fuentes de Excel.
Nick.McDermaid

5

Aquí hay un ejemplo sobre cómo importar datos de Excel a SQL Server. Uno de los principales problemas es asegurarse de utilizar el componente de conversión de datos entre Excel y SQL Server y realizar una conversión de NVARCHAR a VARCHAR, ya que Excel trata los datos como NVARCHAR.

http://www.mssqltips.com/tip.asp?tip=1393


nvarchar está bien con nosotros porque nuestra base de datos admitirá atributos multilingües. Estoy revisando el topis. gracias
kodvavi 01 de


0

No descartaría nada de mr. gbn,Sankar Reddy,SQLChicken. Pero me gustaría decir que hay una manera simple de importar una hoja de Excel en SQL es a través de 'OPENROWSET' TSQL.

Por ejemplo, para importar userhoja de Excel en la TestDBbase de datos. Supongamos que ya he creado la [user]tabla en la TestDBbase de datos. Entonces, el simple TSQL de openrowset estaría debajo de una mención como esa

Use TestDB;
    Go
    select * INTO [User]
    from openrowset('MICROSOFT.ACE.OLEDB.12.0',
    'Excel 12.0; Database=C:\TestFolder\User.xlsx; HDR=yes; IMEX=1',
    'select * from [User$]');
    Go

Nota: Estoy escribiendo este TSQL en el entorno de SQL Server 2012. Para cada servidor SQL, el OLEDBproveedor de openrowset será diferente. Compruebe el OLEDBenlace servidor-> proveedor compatible con esa versión del servidor SQL. En mi caso lo es ACE.OLEDB.12.0. Antes de importar, asegúrese de que Allow inprocessesté marcado o no de ese MICROSOFT.ACE.OLEDB.12.0proveedor. Debería verificarse así ingrese la descripción de la imagen aquí

Nota: - Está probado en el entorno de producción. Pero en su caso sin probar en el entorno de prueba. No ejecute directamente en el entorno de producción.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.