Tạo tập lệnh chèn sql từ trang tính excel


107

Tôi có một trang tính excel lớn mà tôi muốn thêm vào cơ sở dữ liệu của mình.

Tôi có thể tạo tập lệnh chèn SQL từ trang tính excel này không?


2
Tôi tạo ra một công cụ đơn giản để có được kịch bản sql cho cả insert& update ngay tại đây
Pha-trốt

Bạn cũng có thể sử dụng macro VBA của tôi để tạo các lệnh SQL. Thêm ở đây: stackoverflow.com/questions/1570387/…
Petrik

Câu trả lời:


202

Tôi nghĩ rằng nhập bằng một trong các phương pháp được đề cập là lý tưởng nếu nó thực sự là một tệp lớn, nhưng bạn có thể sử dụng Excel để tạo các câu lệnh chèn:

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

Trong MS SQL, bạn có thể sử dụng:

SET NOCOUNT ON

Bỏ qua việc hiển thị tất cả các nhận xét '1 hàng bị ảnh hưởng'. Và nếu bạn đang làm nhiều hàng và lỗi, hãy đặt GO giữa các câu lệnh thỉnh thoảng


3
Tôi đã sử dụng =CONCATENATE()nhưng sử dụng &dấu hiệu dẫn đến khả năng đọc tốt hơn nhiều!
mastazi

1
@mastazi Đồng ý! Tôi đã chuyển sang &khi tôi gặp phải giới hạn tham số CONCATENATE()một thời gian trước đây, đó không phải là vấn đề phổ biến hiện nay khi giới hạn là 255 tham số, nhưng tôi không bao giờ nghĩ đến việc hoàn nguyên.
Hart CO

1
CONCATENATE () là cách để đi. Chỉ cần nhấp vào biểu tượng fx trên thanh công thức để xem những gì bạn đã nhập. Nó gọn gàng hơn nhiều so với việc chỉ sử dụng & ký tên. Tất nhiên để sử dụng & ký là tuyệt vời nhưng đôi khi khi bạn có dấu ngoặc kép hoặc dấu ngoặc kép, điều đó sẽ khiến bạn đếm mãi không ra những gì còn thiếu.
ian0411

1
Không hoạt động khi có dấu ngoặc kép trong ô. Kiểm tra câu trả lời của tôi cho một phiên bản sửa chữa.
Simon Baars, 07/07/17

2
@PreshanPradeepa Bạn có thể sử dụng cùng một cú pháp, SQL Server không quan tâm xem số nguyên có nằm trong dấu ngoặc kép hay không miễn là nó là số nguyên hợp lệ.
Hart CO

29

Có một công cụ tiện dụng giúp tiết kiệm rất nhiều thời gian tại

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

Bạn chỉ cần nhập tên bảng, tên trường và tab dữ liệu và nhấn Go!


7
Không đăng dữ liệu nhạy cảm của bạn trên web. Bạn không có cách nào để biết điều gì xảy ra với dữ liệu bạn gửi đến ứng dụng web. Một số công cụ này lưu trữ dữ liệu của bạn và cung cấp nó công khai
GabiM

28

Bạn có thể tạo một bảng thích hợp thông qua giao diện phòng thu quản lý và chèn dữ liệu vào bảng như hình bên dưới. Có thể mất một khoảng thời gian tùy thuộc vào lượng dữ liệu, nhưng nó rất tiện dụng.

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


Tiện dụng. Tôi thấy rằng với cột IDENTITY, bộ đệm sao chép cần phải có cột, mặc dù dữ liệu trong đó sẽ bị bỏ qua vì các giá trị được tự động tạo khi các hàng được chèn vào.
fortboise

Bạn có thể đặt cột IDENTITY của mình là cột cuối cùng trong danh sách cột và sau đó không cần thiết phải có thêm một cột nào cả.
Andrey Morozov

1
nếu bạn không chỉ định các giá trị IDENTITY trong trang tính excel; bạn có thể thay đổi và chạy lại tập lệnh sql chỉnh sửa 200 hàng hàng đầu bằng cách xóa cột IDENTITY. Vì vậy, khi bạn sao chép và dán các giá trị mà không có IDENTITY; phương pháp này sẽ hoạt động.
aozan88

Điều này bị hỏng cho các trường ngày và thời gian trong Excel cho bất kỳ ai khác gặp sự cố. Dữ liệu ngày giờ được chuyển đổi thành dữ liệu "nhị phân" ở phía SQL vì một số lý do.
Kevin Vasko

1
@condiosluzverde Tôi khuyên bạn nên đăng câu trả lời của riêng bạn. Trong trường hợp chỉnh sửa câu trả lời này, những thay đổi của bạn có thể sẽ bị người kiểm duyệt cộng đồng từ chối.
Andrey Morozov

16

Bạn có thể sử dụng câu lệnh excel sau:

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

Câu trả lời này tốt hơn câu trả lời của Hart CO vì nó tính đến tên cột và loại bỏ lỗi biên dịch do dấu ngoặc kép trong cột. Cột cuối cùng là một ví dụ về cột giá trị số, không có dấu ngoặc kép.


1
Làm tốt lắm. Trong GoogleSheets, tôi đã phải loại bỏ `(dấu / dấu lùi) xung quanh các tham chiếu tên cột.
secretwep, 29/09/17

5

Tùy thuộc vào cơ sở dữ liệu, bạn có thể xuất sang CSV và sau đó sử dụng phương pháp nhập.

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, bạn có thể sử dụng trình hướng dẫn nhập của SSMS để nhập Tệp Excel.
Hart CO

1
Để thêm chi tiết vào @HartCO - Để điều hướng đến Trình hướng dẫn nhập SSMS, hãy nhấp chuột phải vào cơ sở dữ liệu, di chuột qua các tác vụ, nhấp vào "Nhập dữ liệu ..." ở gần cuối trình đơn ngữ cảnh. Làm theo các bước trong trình hướng dẫn.
qxotk

2

Bạn có thể sử dụng VB để viết một cái gì đó sẽ xuất ra từng hàng tệp, thêm vào các câu lệnh sql thích hợp xung quanh dữ liệu của bạn. Tôi đã làm điều này trước đây.


1

Đây là một công cụ khác hoạt động rất tốt ...

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

Nó có thể nhận các giá trị được phân tách bằng tab và tạo một tập lệnh INSERT. Chỉ cần sao chép và dán và trong các tùy chọn ở bước 2, hãy chọn hộp "Hàng đầu tiên là tên cột"

Sau đó cuộn xuống dưới bước 3, nhập tên bảng của bạn vào hộp "Schema.Table hoặc View Name:"

Hãy chú ý đến hộp kiểm xóa và tạo bảng cũng như đảm bảo rằng bạn đã kiểm tra tập lệnh đã tạo trước khi chạy nó.

Đây là cách nhanh nhất và đáng tin cậy nhất mà tôi đã tìm thấy.


1

Sử dụng ConvertFrom-ExcelToSQLInserttừ ImportExcel trong Thư viện 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

Đây là một liên kết đến một trình tự động trực tuyến để chuyển đổi tệp CSV sang câu lệnh Chèn vào SQL:

CSV-to-SQL


0

Truy vấn này tôi đã tạo để chèn dữ liệu tệp Excel vào cơ sở dữ liệu Trong id này và giá cũng là giá trị số và trường ngày. Truy vấn này tóm tắt tất cả các loại mà tôi yêu cầu. Nó cũng có thể hữu ích cho bạn

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

Bạn có thể sử dụng Phương pháp C # dưới đây để tạo tập lệnh chèn bằng trang tính Excel chỉ cần bạn nhập Gói OfficeOpenXml từ Trình quản lý gói NuGet trước khi thực thi phương pháp.

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

Tôi có một cách đáng tin cậy để tạo các đoạn chèn SQL và bạn có thể sửa đổi từng phần các tham số trong quá trình xử lý. Nó giúp tôi rất nhiều trong công việc, ví dụ: sao chép hàng trăm dữ liệu vào cơ sở dữ liệu có cấu trúc và số trường không tương thích. IntellIJ DataGrip , công cụ mạnh mẽ mà tôi sử dụng. DG có thể nhận dữ liệu từ văn phòng WPS hoặc MS Excel theo cột hoặc dòng. sau khi sao chép, DG có thể xuất dữ liệu dưới dạng chèn SQL .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.