สร้างสคริปต์แทรก sql จากแผ่นงาน excel


107

ฉันมีแผ่นงาน excel ขนาดใหญ่ที่ต้องการเพิ่มลงในฐานข้อมูล

ฉันสามารถสร้างสคริปต์แทรก SQL จากแผ่นงาน excel นี้ได้หรือไม่


2
ฉันสร้างเครื่องมือง่ายๆเพื่อรับสคริปต์ sql สำหรับทั้งสองinsert& update ที่นี่
Pathros

คุณยังสามารถใช้แมโคร VBA ของฉันเพื่อสร้างคำสั่ง SQL เพิ่มเติมที่นี่: stackoverflow.com/questions/1570387/…
Petrik

คำตอบ:


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 บนแถบสูตรเพื่อดูสิ่งที่คุณป้อน มันสะอาดกว่าแค่ใช้ & เซ็นชื่อ แน่นอนว่าการใช้ & sign นั้นยอดเยี่ยม แต่บางครั้งเมื่อคุณมีเครื่องหมายอัญประกาศคู่หรือเครื่องหมายคำพูดเดี่ยวนั่นจะทำให้คุณนับสิ่งที่ขาดหายไปตลอดกาล
ian0411

1
ไม่ทำงานเมื่อมีเครื่องหมายคำพูดในเซลล์ ตรวจสอบคำตอบของฉันสำหรับเวอร์ชันที่แก้ไข
Simon Baars

2
@PreshanPradeepa คุณสามารถใช้ไวยากรณ์เดียวกันได้ SQL Server ไม่สนใจว่าจำนวนเต็มจะอยู่ในเครื่องหมายคำพูดตราบใดที่เป็นจำนวนเต็มที่ถูกต้อง
Hart CO

29

มีเครื่องมือที่มีประโยชน์ซึ่งช่วยประหยัดเวลาได้มากที่

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

คุณต้องป้อนชื่อตารางชื่อฟิลด์และข้อมูล - แยกแท็บแล้วกด Go!


7
อย่าโพสต์ข้อมูลที่ละเอียดอ่อนของคุณบนเว็บ คุณไม่มีทางรู้ได้เลยว่าเกิดอะไรขึ้นกับข้อมูลที่คุณส่งไปยังเว็บแอปพลิเคชัน เครื่องมือเหล่านี้บางส่วนจัดเก็บข้อมูลของคุณและเผยแพร่สู่สาธารณะ
GabiM

28

คุณสามารถสร้างตารางที่เหมาะสมผ่านอินเทอร์เฟซสตูดิโอการจัดการและแทรกข้อมูลลงในตารางตามที่แสดงด้านล่าง อาจใช้เวลาสักครู่ขึ้นอยู่กับปริมาณข้อมูล แต่มีประโยชน์มาก

ใส่คำอธิบายภาพที่นี่

ใส่คำอธิบายภาพที่นี่


สะดวก ฉันเห็นว่าด้วยคอลัมน์ IDENTITY สำเนาบัฟเฟอร์จำเป็นต้องมีคอลัมน์แม้ว่าข้อมูลในนั้นจะถูกละเว้นเนื่องจากค่าจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อมีการแทรกแถว
fortboise

คุณสามารถทำให้คอลัมน์ IDENTITY เป็นคอลัมน์สุดท้ายในรายการคอลัมน์จากนั้นก็ไม่จำเป็นต้องมีคอลัมน์พิเศษเลย
Andrey Morozov

1
หากคุณไม่ได้ระบุค่า IDENTITY ในแผ่นงาน excel คุณสามารถเปลี่ยนและรันสคริปต์ sql แก้ไข 200 แถวบนสุดอีกครั้งได้โดยการลบคอลัมน์ IDENTITY ดังนั้นเมื่อคุณคัดลอกและวางค่าโดยไม่ระบุตัวตน วิธีนี้จะได้ผล
aozan88

สิ่งนี้ใช้ไม่ได้สำหรับฟิลด์วันที่และเวลาใน Excel สำหรับใครก็ตามที่ประสบปัญหา ข้อมูลวันที่และเวลาได้รับการแปลงเป็นข้อมูล "ไบนารี" ทางฝั่ง SQL ด้วยเหตุผลบางประการ
Kevin Vasko

1
@condiosluzverde ฉันขอแนะนำให้คุณโพสต์คำตอบของคุณเอง ในกรณีของการแก้ไขคำตอบนี้การเปลี่ยนแปลงของคุณอาจถูกปฏิเสธโดยผู้ดูแลชุมชน
Andrey Morozov

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
การทำงานที่ดี. ใน Google ชีตฉันต้องลบ `(หลุมฝังศพ / แบ็คทิก) โดยรอบการอ้างอิงชื่อคอลัมน์
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 Import Wizard ให้คลิกขวาที่ฐานข้อมูลวางเมาส์เหนืองานคลิกที่ "นำเข้าข้อมูล ... " ใกล้กับด้านล่างของเมนูบริบท ทำตามขั้นตอนในวิซาร์ด
qxotk

2

คุณสามารถใช้ VB เพื่อเขียนสิ่งที่จะส่งออกไปยังไฟล์ทีละแถวโดยเพิ่มคำสั่ง sql ที่เหมาะสมรอบ ๆ ข้อมูลของคุณ ฉันได้ทำสิ่งนี้มาก่อน


1

นี่เป็นอีกหนึ่งเครื่องมือที่ใช้งานได้ดีมาก ...

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

สามารถใช้ค่าที่คั่นด้วยแท็บและสร้างสคริปต์ INSERT เพียงคัดลอกและวางและในตัวเลือกในขั้นตอนที่ 2 ให้เลือกช่อง "แถวแรกคือชื่อคอลัมน์"

จากนั้นเลื่อนลงและในขั้นตอนที่ 3 ป้อนชื่อตารางของคุณในช่อง "Schema.Table หรือ 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 ลงในฐานข้อมูลใน 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 จาก 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 บ่อยๆและเพิ่มเข้าไปในการควบคุมแหล่งที่มาและส่งไปยัง DBA ฉันใช้แอพ ExcelIntoSQL นี้จาก windows store https://www.microsoft.com/store/apps/9NH0W51XXQRM มันสร้างสคริปต์ที่สมบูรณ์ด้วย "CREATE TABLE" และ INSERTS


0

ฉันมีวิธีที่เชื่อถือได้ในการสร้างการแทรก SQL อย่างสม่ำเสมอและคุณสามารถแก้ไขพารามิเตอร์บางส่วนในการประมวลผลได้มันช่วยฉันได้มากในงานของฉันเช่นคัดลอกข้อมูลหนึ่งร้อยข้อมูลไปยังฐานข้อมูลที่มีโครงสร้างและจำนวนฟิลด์ที่เข้ากันไม่ได้ IntellIJ DataGripเครื่องมืออันทรงพลังที่ฉันใช้ DG สามารถรับข้อมูลจากสำนักงาน WPS หรือ MS Excel ตามคอลัมน์หรือบรรทัด หลังจากคัดลอกDG สามารถส่งออกข้อมูลแทรก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.