Generar script de inserción SQL desde la hoja de trabajo de Excel


107

Tengo una hoja de trabajo de Excel grande que quiero agregar a mi base de datos.

¿Puedo generar un script de inserción SQL a partir de esta hoja de trabajo de Excel?


2
Creé una herramienta simple para obtener scripts SQL para ambos inserty update aquí mismo
Pathros

También puede usar mi macro VBA para generar comandos SQL. Más aquí: stackoverflow.com/questions/1570387/…
Petrik

Respuestas:


202

Creo que importar usando uno de los métodos mencionados es ideal si realmente es un archivo grande, pero puede usar Excel para crear declaraciones de inserción:

="INSERT INTO table_name VALUES('"&A1&"','"&B1&"','"&C1&"')"

En MS SQL puede utilizar:

SET NOCOUNT ON

Dejar de mostrar todos los comentarios de "1 fila afectada". Y si está haciendo muchas filas y se produce un error, coloque un GO entre las declaraciones de vez en cuando


3
¡Estaba usando, =CONCATENATE()pero usar el &letrero conduce a una legibilidad mucho mejor!
mastazi

1
@mastazi ¡De acuerdo! Cambié a &cuando me topé con el límite de parámetros hace CONCATENATE()un tiempo, ese no es un problema común ahora que el límite es de 255 parámetros, pero nunca pienso en revertir.
Hart CO

1
CONCATENATE () es el camino a seguir. Simplemente haga clic en el icono de fx en la barra de fórmulas para ver lo que ha ingresado. Es mucho más limpio que usar y firmar. Por supuesto, usar & sign es genial, pero en algún momento cuando tenga comillas dobles o comillas simples, eso le hará contar para siempre lo que falta.
ian0411

1
No funciona cuando hay comillas en las celdas. Verifique mi respuesta para obtener una versión corregida.
Simon Baars

2
@PreshanPradeepa Puede usar la misma sintaxis, a SQL Server no le importa si el número entero está entre comillas siempre que sea un número entero válido.
Hart CO

29

Hay una herramienta útil que ahorra mucho tiempo en

http://tools.perceptus.ca/text-wiz.php?ops=7

Solo tiene que ingresar el nombre de la tabla, los nombres de los campos y los datos, separados por pestañas y presionar Ir.


7
No publique sus datos confidenciales en la web. No tiene forma de saber qué sucede con los datos que envía a la aplicación web. Algunas de estas herramientas almacenan sus datos y los ponen a disposición del público
GabiM

28

Puede crear una tabla adecuada a través de la interfaz de Management Studio e insertar datos en la tabla como se muestra a continuación. Puede llevar algún tiempo dependiendo de la cantidad de datos, pero es muy útil.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí


Práctico. Veo que con una columna de IDENTIDAD, el búfer de copia debe tener la columna, aunque los datos que contiene se ignorarán ya que los valores se generan automáticamente a medida que se insertan las filas.
fortboise

Puede hacer que su columna IDENTIDAD sea la última en la lista de columnas y luego no sería necesario tener una columna adicional en absoluto.
Andrey Morozov

1
si no especifica los valores de IDENTIDAD en la hoja de Excel; puede cambiar y volver a ejecutar el script sql de edición de las 200 filas superiores eliminando la columna IDENTIDAD. Entonces, cuando copia y pega los valores sin IDENTIDAD; este método funcionará.
aozan88

Esto está roto para los campos de fecha y hora en Excel para cualquier otra persona que tenga el problema. Los datos de fecha y hora se convierten en datos "binarios" en el lado SQL por alguna razón.
Kevin Vasko

1
@condiosluzverde Te aconsejo que publiques tu propia respuesta. En caso de editar esta respuesta, los moderadores de la comunidad probablemente rechazarán sus cambios.
Andrey Morozov

16

Puede utilizar la siguiente declaración de Excel:

="INSERT INTO table_name(`"&$A$1&"`,`"&$B$1&"`,`"&$C$1&"`, `"&$D$1&"`) VALUES('"&SUBSTITUTE(A2, "'", "\'")&"','"&SUBSTITUTE(B2, "'", "\'")&"','"&SUBSTITUTE(C2, "'", "\'")&"', "&D2&");"

Esto es mejor que la respuesta de Hart CO, ya que tiene en cuenta los nombres de las columnas y elimina los errores de compilación debidos a las comillas en la columna. La última columna es un ejemplo de una columna de valor numérico, sin comillas.


1
Buen trabajo. En GoogleSheets tuve que eliminar `(grave / backtick) que rodea las referencias del nombre de la columna.
secretwep

5

Dependiendo de la base de datos, puede exportar a CSV y luego usar un método de importación.

MySQL: http://dev.mysql.com/doc/refman/5.1/en/load-data.html

PostgreSQL: http://www.postgresql.org/docs/8.2/static/sql-copy.html


3
MS SQL, puede utilizar el asistente de importación de SSMS para importar un archivo de Excel.
Hart CO

1
Para agregar detalles a @HartCO: para navegar al Asistente de importación SSMS, haga clic con el botón derecho en la base de datos, coloque el cursor sobre las tareas, haga clic en "Importar datos ..." cerca de la parte inferior del menú contextual. Siga los pasos del asistente.
qxotk

2

Puede usar VB para escribir algo que saldrá a un archivo fila por fila agregando las declaraciones SQL apropiadas alrededor de sus datos. He hecho esto antes.


1

Aquí hay otra herramienta que funciona muy bien ...

http://www.convertcsv.com/csv-to-sql.htm

Puede tomar valores separados por tabulaciones y generar un script INSERT. Simplemente copie y pegue y en las opciones del paso 2 marque la casilla "La primera fila son los nombres de las columnas"

Luego, desplácese hacia abajo y, en el paso 3, ingrese el nombre de su tabla en el cuadro "Esquema.Tabla o nombre de vista:"

Preste atención también a las casillas de verificación de eliminar y crear tabla, y asegúrese de examinar el script generado antes de ejecutarlo.

Esta es la forma más rápida y confiable que he encontrado.


1

Use el ConvertFrom-ExcelToSQLInsertde ImportExcel en la Galería de PowerShell

NAME
    ConvertFrom-ExcelToSQLInsert
SYNTAX
    ConvertFrom-ExcelToSQLInsert [-TableName] <Object> [-Path] <Object> 
      [[-WorkSheetname] <Object>] [[-HeaderRow] <int>] 
      [[-Header] <string[]>] [-NoHeader] [-DataOnly]  [<CommonParameters>]
PARAMETERS
    -DataOnly
    -Header <string[]>
    -HeaderRow <int>
    -NoHeader
    -Path <Object>
    -TableName <Object>
    -WorkSheetname <Object>
    <CommonParameters>
        This cmdlet supports the common parameters: Verbose, Debug,
        ErrorAction, ErrorVariable, WarningAction, WarningVariable,
        OutBuffer, PipelineVariable, and OutVariable. For more information, see
        about_CommonParameters (http://go.microsoft.com/fwlink/?LinkID=113216).
ALIASES
    None
REMARKS
    None


0

Esta consulta la he generado para insertar los datos del archivo de Excel en la base de datos. En esta identificación y precio también se encuentran los valores numéricos y el campo de fecha. Esta consulta resumió todo el tipo que necesito.También puede ser útil para usted.

="insert into  product (product_id,name,date,price) values("&A1&",'" &B1& "','" &C1& "'," &D1& ");"


    Id    Name           Date           price 
    7   Product 7   2017-01-05 15:28:37 200
    8   Product 8   2017-01-05 15:28:37 40
    9   Product 9   2017-01-05 15:32:31 500
    10  Product 10  2017-01-05 15:32:31 30
    11  Product 11  2017-01-05 15:32:31 99
    12  Product 12  2017-01-05 15:32:31 25

0

Puede usar el método C # siguiente para generar los scripts de inserción usando la hoja de Excel, solo necesita importar el paquete OfficeOpenXml desde NuGet Package Manager antes de ejecutar el método.

public string GenerateSQLInsertScripts() {

        var outputQuery = new StringBuilder();
        var tableName = "Your Table Name";
        if (file != null)
        {
            var filePath = @"D:\FileName.xsls";

            using (OfficeOpenXml.ExcelPackage xlPackage = new OfficeOpenXml.ExcelPackage(new FileInfo(filePath)))
            {
                var myWorksheet = xlPackage.Workbook.Worksheets.First(); //select the first sheet here
                var totalRows = myWorksheet.Dimension.End.Row;
                var totalColumns = myWorksheet.Dimension.End.Column;

                var columns = new StringBuilder(); //this is your columns

                var columnRows = myWorksheet.Cells[1, 1, 1, totalColumns].Select(c => c.Value == null ? string.Empty : c.Value.ToString());

                columns.Append("INSERT INTO["+ tableName +"] (");
                foreach (var colrow in columnRows)
                {
                    columns.Append("[");
                    columns.Append(colrow);
                    columns.Append("]");
                    columns.Append(",");
                }
                columns.Length--;
                columns.Append(") VALUES (");
                for (int rowNum = 2; rowNum <= totalRows; rowNum++) //selet starting row here
                {
                    var dataRows = myWorksheet.Cells[rowNum, 1, rowNum, totalColumns].Select(c => c.Value == null ? string.Empty : c.Value.ToString());

                    var finalQuery = new StringBuilder(); 
                    finalQuery.Append(columns);

                    foreach (var dataRow in dataRows)
                    {
                        finalQuery.Append("'");
                        finalQuery.Append(dataRow);
                        finalQuery.Append("'");
                        finalQuery.Append(",");
                    }
                    finalQuery.Length--;

                    finalQuery.Append(");");

                    outputQuery.Append(finalQuery);

                  }

            }
        }

return outputQuery.ToString();}


0

Tengo una forma confiable de generar inserciones SQL batly, y puedes modificar parámetros parciales en el procesamiento. Me ayuda mucho en mi trabajo, por ejemplo, copiar cientos de datos a una base de datos con estructura incompatible y conteo de campos. IntellIJ DataGrip , la poderosa herramienta que utilizo. DG puede recibir datos de la oficina de WPS o MS Excel por columna o línea. después de copiar, DG puede exportar datos como inserciones SQL .

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.