Створіть скрипт для вставки sql з робочого листа excel


107

У мене є великий робочий аркуш excel, який я хочу додати до своєї бази даних.

Чи можу я створити сценарій вставки SQL з цього робочого аркуша Excel?


2
Я створив простий інструмент, щоб отримати сценарії sql для обох insertі update прямо тут
Pathros

Ви також можете використовувати мій макрос 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

1
Не працює при наявності лапок у клітинках. Перевірте мою відповідь на виправлену версію.
Саймон Баарс

2
@PreshanPradeepa Ви можете використовувати той самий синтаксис, SQL Server не хвилює, чи є ціле число в лапках, якщо це дійсне ціле число.
Харт CO

29

Є зручний інструмент, який економить багато часу на

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

Вам просто потрібно ввести ім'я таблиці, назви полів та дані - вкладка відокремлена та натисніть Go!


7
Не публікуйте ваші конфіденційні дані в Інтернеті. Ви не можете знати, що відбувається з даними, які ви надсилаєте до веб-програми. Деякі з цих інструментів зберігають ваші дані та роблять їх загальнодоступними
GabiM

28

Ви можете створити відповідну таблицю через інтерфейс студії управління та вставити дані в таблицю, як показано нижче. Це може зайняти деякий час, залежно від обсягу даних, але це дуже зручно.

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

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


Зручно. Я бачу, що зі стовпцем ІДЕНТИЧНОСТІ буфер для копіювання повинен мати стовпець, навіть якщо дані в ньому будуть ігноруватися, оскільки значення автогенеруються під час вставки рядків.
fortboise

Ви можете зробити свій стовпець "ІДЕНТИМИТЕТ" останнім у списку стовпців, і тоді взагалі не потрібно було б мати додатковий стовпець.
Андрій Морозов

1
якщо ви не вказуєте значення IDENTITY на аркуші excel; ви можете змінити і запустити сценарій редагування верхніх 200 рядків sql, видаливши стовпець IDENTITY. Отже, коли ви копіюєте та вставляєте значення без ідентичності; цей метод спрацює.
aozan88

Це порушено для полів дати та часу в Excel для всіх, хто зіткнеться з проблемою. Дані часу date чомусь перетворюються на "двійкові" дані на стороні 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 мені довелося видалити `(могила / backtick), що оточує посилання на ім'я стовпця.
secretwep

5

Залежно від бази даних, ви можете експортувати в CSV, а потім використовувати метод імпорту.

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

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


3
MS SQL, ви можете використовувати майстра імпорту SSMS для імпорту файлу Excel.
Харт СО

1
Щоб додати деталі до @HartCO - Щоб перейти до майстра імпорту SSMS правою кнопкою миші на базі даних, наведіть курсор миші на завдання, натисніть "Імпортувати дані ..." внизу контекстного меню. Виконайте вказівки майстра.
qxotk

2

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


1

Ось ще один інструмент, який дуже добре працює ...

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

Він може приймати значення, розділені на вкладки, та генерувати сценарій INSERT. Просто скопіюйте та вставте і в опціях під кроком 2 встановіть прапорець "Перший рядок - це назви стовпців"

Потім прокрутіть вниз і під кроком 3 введіть назву таблиці у поле "Схема. Таблиця або Переглянути ім'я:"

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

Це найшвидший і найнадійніший спосіб, який я знайшов.


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 у базу даних. У цьому id та ціні є числові значення та поле дати. Цей запит узагальнив усі типи, які мені потрібні. Він може бути корисним і вам

="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 Package від NuGet Package Manager перед виконанням методу.

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, і ви можете змінювати часткові параметри при обробці. Це дуже допомагає мені в моїй роботі, наприклад, копіювати сотні даних у базу даних з несумісною структурою та кількістю полів. IntellIJ DataGrip - потужний інструмент, який я використовую. Генеральний директор може отримувати дані з офісу WPS або MS Excel за стовпцем або рядком. після копіювання DG може експортувати дані у вигляді вставок SQL .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.