我有一个很大的Excel工作表,我想添加到数据库中。
我可以从此excel工作表生成SQL插入脚本吗?
我有一个很大的Excel工作表,我想添加到数据库中。
我可以从此excel工作表生成SQL插入脚本吗?
Answers:
我认为如果确实是一个大文件,则使用上述方法之一导入是理想的,但是您可以使用Excel创建插入语句:
="INSERT INTO table_name VALUES('"&A1&"','"&B1&"','"&C1&"')"
在MS SQL中,您可以使用:
SET NOCOUNT ON
放弃显示所有“第1行受影响”的注释。而且,如果您要执行很多行并且出错了,请偶尔在语句之间放置一个GO
=CONCATENATE()
但使用该&
标志可提高可读性!
&
遇到参数限制CONCATENATE()
时,由于限制为255个参数,这已经不是一个普遍的问题,但是我从来没有考虑过还原。
您可以通过Management Studio界面创建适当的表,然后将数据插入表中,如下所示。根据数据量可能会花费一些时间,但是非常方便。
您可以使用以下excel语句:
="INSERT INTO table_name(`"&$A$1&"`,`"&$B$1&"`,`"&$C$1&"`, `"&$D$1&"`) VALUES('"&SUBSTITUTE(A2, "'", "\'")&"','"&SUBSTITUTE(B2, "'", "\'")&"','"&SUBSTITUTE(C2, "'", "\'")&"', "&D2&");"
这比Hart CO的答案更好,因为它考虑了列名,并且消除了由于列中的引号引起的编译错误。最后一列是不带引号的数值列的示例。
根据数据库,您可以导出为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
这是另一个效果很好的工具...
http://www.convertcsv.com/csv-to-sql.htm
它可以采用制表符分隔的值并生成INSERT脚本。只需复制并粘贴,然后在步骤2下的选项中选中“第一行是列名”框
然后向下滚动并在步骤3下,在“ Schema.Table或View Name:”框中输入表名称。
还要注意删除和创建表复选框,并确保在运行之前检查生成的脚本。
这是我找到的最快,最可靠的方法。
使用PowerShell库中ConvertFrom-ExcelToSQLInsert
的ImportExcel
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
我生成此查询是为了将Excel文件数据插入数据库。在此id和price中,数字值和日期字段也是如此。该查询总结了我需要的所有类型,这可能也对您有用
="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
您可以使用下面的C#方法使用Excel工作表生成插入脚本,只需要在执行该方法之前从NuGet程序包管理器导入OfficeOpenXml程序包。
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();}
我不得不经常制作SQL脚本并将其添加到源代码管理中,然后将其发送给DBA。我从Windows商店https://www.microsoft.com/store/apps/9NH0W51XXQRM使用了这个ExcelIntoSQL应用程序, 它使用“创建表”和INSERTS创建了完整的脚本。
我有一个可靠的方法可以可靠地生成SQL插入,并且可以在处理过程中修改部分参数。它对我的工作有很大帮助,例如,将数百个数据复制到结构和字段数不兼容的数据库中。 我使用的功能强大的工具IntellIJ DataGrip。DG可以按列或行从WPS office或MS Excel轻松接收数据。复制后,DG可以将数据导出为SQL插入。
insert
&update
这里 ☺