Сгенерировать скрипт вставки sql из листа Excel


107

У меня есть большой рабочий лист Excel, который я хочу добавить в свою базу данных.

Могу ли я сгенерировать сценарий вставки SQL из этого листа Excel?


2
Я создал простой инструмент для получения сценариев sql для обоих insertи update прямо здесь
Патрос

Вы также можете использовать мой макрос VBA для создания команд SQL. Подробнее здесь: stackoverflow.com/questions/1570387/…
Петрик

Ответы:


202

Я думаю, что импорт с использованием одного из упомянутых методов идеален, если это действительно большой файл, но вы можете использовать Excel для создания операторов вставки:

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

В MS SQL вы можете использовать:

SET NOCOUNT ON

Отказаться от отображения всех комментариев "затронуты 1 строка". И если вы делаете много строк и выдает ошибки, время от времени помещайте GO между операторами


3
Я использовал, =CONCATENATE()но использование &знака улучшает читаемость!
mastazi

1
@mastazi Согласен! Я переключился на, &когда CONCATENATE()некоторое время назад натолкнулся на ограничение параметра , это не обычная проблема, теперь, когда ограничение составляет 255 параметров, но я никогда не думаю о возврате.
Hart CO

1
CONCATENATE () - это путь. Просто щелкните значок fx в строке формул, чтобы увидеть, что вы ввели. Это намного чище, чем просто использовать и подписывать. Конечно, использовать знак & - это круто, но иногда, когда у вас есть двойные кавычки или одинарные кавычки, это заставит вас вечно считать то, чего не хватает.
ian0411 02

1
Не работает при наличии кавычек в ячейках. Проверьте мой ответ на исправленную версию.
Саймон Баарс

2
@PreshanPradeepa. Вы можете использовать тот же синтаксис, SQL Server не заботится о том, находится ли целое число в кавычках, если оно является действительным целым числом.
Hart CO

29

Есть удобный инструмент, который экономит много времени на

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

Вам просто нужно ввести имя таблицы, имена полей и данные - разделить табуляцию и нажать Go!


8
Не размещайте конфиденциальные данные в Интернете. У вас нет возможности узнать, что происходит с данными, которые вы отправляете в веб-приложение. Некоторые из этих инструментов хранят ваши данные и делают их общедоступными
GabiM

28

Вы можете создать соответствующую таблицу через интерфейс Management Studio и вставить данные в таблицу, как показано ниже. Это может занять некоторое время, в зависимости от объема данных, но это очень удобно.

введите описание изображения здесь

введите описание изображения здесь


Удобно. Я вижу, что для столбца IDENTITY в буфере копирования должен быть столбец, даже если данные в нем будут игнорироваться, поскольку значения генерируются автоматически при вставке строк.
fortboise

Вы можете сделать свой столбец IDENTITY последним в списке столбцов, и тогда вообще не будет необходимости в дополнительном столбце.
Андрей Морозов

1
если вы не укажете значения IDENTITY на листе Excel; вы можете изменить и повторно запустить sql-скрипт редактирования 200 верхних строк, удалив столбец IDENTITY. Поэтому, когда вы копируете и вставляете значения без IDENTITY; этот метод будет работать.
aozan88

Это не работает для полей даты и времени в Excel для всех, кто сталкивается с проблемой. Данные datetime по какой-то причине преобразуются в "двоичные" данные на стороне SQL.
Кевин Васько

1
@condiosluzverde Я бы посоветовал вам опубликовать свой ответ. В случае редактирования этого ответа ваши изменения, вероятно, будут отклонены модераторами сообщества.
Андрей Морозов

16

Вы можете использовать следующий оператор Excel:

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

Это улучшает ответ Hart CO, поскольку он учитывает имена столбцов и избавляется от ошибок компиляции из-за кавычек в столбце. Последний столбец представляет собой пример столбца с числовым значением без кавычек.


1
Хорошая работа. В GoogleSheets мне пришлось удалить `(могилу / обратную кавычку) вокруг ссылок на имена столбцов.
secretwep

5

В зависимости от базы данных вы можете экспортировать в CSV, а затем использовать метод импорта.

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, вы можете использовать мастер импорта SSMS для импорта файла Excel.
Hart CO

1
Чтобы добавить сведения в @HartCO - Чтобы перейти к мастеру импорта SSMS, щелкните правой кнопкой мыши базу данных, наведите указатель мыши на задачи, нажмите «Импортировать данные ...» в нижней части контекстного меню. Следуйте инструкциям мастера.
qxotk

2

Вы можете использовать VB, чтобы написать что-то, что будет выводиться в файл построчно, добавляя соответствующие операторы sql к вашим данным. Я делал это раньше.


1

Вот еще один инструмент, который очень хорошо работает ...

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

Он может принимать значения, разделенные табуляцией, и генерировать сценарий INSERT. Просто скопируйте и вставьте и в параметрах шага 2 установите флажок «Первая строка - это имена столбцов».

Затем прокрутите вниз и шаге 3 введите имя своей таблицы в поле «Schema.Table or View Name:»

Обратите внимание на флажки для удаления и создания таблицы и убедитесь, что вы проверили созданный сценарий перед его запуском.

Это самый быстрый и надежный способ, который я нашел.


1

Используйте ConvertFrom-ExcelToSQLInsertиз ImportExcel в галерее 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

Этот запрос, который я создал для вставки данных файла Excel в базу данных. В этом идентификаторе и цене также есть числовые значения и поле даты. Этот запрос суммировал все типы, которые мне нужны. Он также может быть полезен вам.

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

Вы можете использовать приведенный ниже метод C # для создания сценариев вставки с помощью листа Excel, просто вам нужно импортировать пакет OfficeOpenXml из диспетчера пакетов NuGet перед выполнением метода.

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

Мне приходилось часто создавать сценарии SQL, добавлять их в систему управления версиями и отправлять их администратору баз данных. Я использовал это приложение ExcelIntoSQL из магазина Windows https://www.microsoft.com/store/apps/9NH0W51XXQRM. Оно создает полный сценарий с «СОЗДАТЬ ТАБЛИЦУ» и ВСТАВКИ.


0

У меня есть надежный способ генерировать SQL-вставки, и вы можете изменять частичные параметры при обработке. Это очень помогает мне в моей работе, например, копирование сотен данных в базу данных с несовместимой структурой и количеством полей. IntellIJ DataGrip - мощный инструмент, который я использую. DG может получать данные из офиса WPS или MS Excel по столбцу или строке. после копирования DG может экспортировать данные в виде вставок SQL .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.