将CSV文件导入到SQL Server中

我正在寻找帮助使用BULK INSERT.csv文件导入到SQL Server中,并且我有几个基本问​​题。

问题:

  1. CSV文件数据之间可能有(逗号)(例如:说明),那么如何使导入处理这些数据?

  2. 如果客户端从Excel创buildCSV,那么带有逗号的数据将被包含在"" (双引号)内[如下例所示],那么导入如何处理呢?

  3. 我们如何跟踪一些行是否有错误的数据,导入跳过? (导入是否跳过不可导入的行)

以下是带标题的示例CSV:

 Name,Class,Subject,ExamDate,Mark,Description Prabhat,4,Math,2/10/2013,25,Test data for prabhat. Murari,5,Science,2/11/2013,24,"Test data for his's test, where we can test 2nd ROW, Test." sanjay,4,Science,,25,Test Only. 

和SQL语句导入:

 BULK INSERT SchoolsTemp FROM 'C:\CSVData\Schools.csv' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ',', --CSV field delimiter ROWTERMINATOR = '\n', --Use to shift the control to next row TABLOCK ) 

基于SQL Server CSV导入

1)CSV文件数据之间可能有(逗号)(例:说明),那么如何使导入处理这些数据?

如果您使用(逗号)作为分隔符,则无法区分作为字段终止符的逗号和数据中的逗号。 我会使用像||这样的不同的FIELDTERMINATOR 。 代码看起来像,这将完美处理逗号和单斜杠。

2)如果客户端从excel创buildcsv,那么包含逗号的数据将被包含在" ... " (双引号)内[如下例所示],那么导入如何处理呢?

如果您使用BULK插入,则无法处理双引号,数据将使用双引号插入到行中。 在将数据插入表格之后,您可以将这些双引号replace为“ ”。

 update table set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','') 

3)我们如何跟踪一些行是否有错误的数据,导入跳过? (导入是否跳过不可导入的行)?

要处理由于数据或格式无效而未载入表的行,可以使用ERRORFILE属性进行处理,指定错误文件名,将错误文件写入有错误的行。 代码应该看起来像。

 BULK INSERT SchoolsTemp FROM 'C:\CSVData\Schools.csv' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ',', --CSV field delimiter ROWTERMINATOR = '\n', --Use to shift the control to next row ERRORFILE = 'C:\CSVDATA\SchoolsErrorRows.csv', TABLOCK ) 

解决数据问题中逗号问题的最佳,最快和最简单的方法是在将Windows列表分隔符设置为逗号(例如pipe道)之外的其他设置后,使用Excel保存逗号分隔的文件。 然后这将生成一个pipe道(或别的)分开的文件给你,然后你可以导入。 这在这里描述。

冷杉你需要导入CSV文件到数据表中

然后,您可以使用SQLBulkCopy插入批量行

 using System; using System.Data; using System.Data.SqlClient; namespace SqlBulkInsertExample { class Program { static void Main(string[] args) { DataTable prodSalesData = new DataTable("ProductSalesData"); // Create Column 1: SaleDate DataColumn dateColumn = new DataColumn(); dateColumn.DataType = Type.GetType("System.DateTime"); dateColumn.ColumnName = "SaleDate"; // Create Column 2: ProductName DataColumn productNameColumn = new DataColumn(); productNameColumn.ColumnName = "ProductName"; // Create Column 3: TotalSales DataColumn totalSalesColumn = new DataColumn(); totalSalesColumn.DataType = Type.GetType("System.Int32"); totalSalesColumn.ColumnName = "TotalSales"; // Add the columns to the ProductSalesData DataTable prodSalesData.Columns.Add(dateColumn); prodSalesData.Columns.Add(productNameColumn); prodSalesData.Columns.Add(totalSalesColumn); // Let's populate the datatable with our stats. // You can add as many rows as you want here! // Create a new row DataRow dailyProductSalesRow = prodSalesData.NewRow(); dailyProductSalesRow["SaleDate"] = DateTime.Now.Date; dailyProductSalesRow["ProductName"] = "Nike"; dailyProductSalesRow["TotalSales"] = 10; // Add the row to the ProductSalesData DataTable prodSalesData.Rows.Add(dailyProductSalesRow); // Copy the DataTable to SQL Server using SqlBulkCopy using (SqlConnection dbConnection = new SqlConnection("Data Source=ProductHost;Initial Catalog=dbProduct;Integrated Security=SSPI;Connection Timeout=60;Min Pool Size=2;Max Pool Size=20;")) { dbConnection.Open(); using (SqlBulkCopy s = new SqlBulkCopy(dbConnection)) { s.DestinationTableName = prodSalesData.TableName; foreach (var column in prodSalesData.Columns) s.ColumnMappings.Add(column.ToString(), column.ToString()); s.WriteToServer(prodSalesData); } } } } } 

以下是我将如何解决它:

  1. 在excel中保存你的CSV文件作为XLS表格(通过这样做,你不必担心分隔符,Excel的电子表格格式将被作为表格读取并直接导入到SQL表格中)

  2. 使用SSIS导入文件

  3. 在导入pipe理器中写一个自定义脚本来省略/修改你正在查找的数据(或者运行一个主脚本来仔细检查你要删除的数据)

祝你好运。

通过SQL Server Management Studio将CSV文件导入数据库。

  1. 首先,在数据库中创build一个表格,将CSV文件导入到该表格中。
  2. 使用SQL Server Management Studiologin到数据库。
  3. 右键单击数据库并select任务 – >导入数据…
  4. 点击下一步>button。
  5. 对于数据源,请select平面文件源。 然后使用浏览buttonselectCSV文件。 花点时间configuration数据导入,然后点击Next>button。
  6. 对于目标,请select正确的数据库提供程序(例如对于SQL Server 2012,可以使用SQL Server Native Client 11.0)。 input服务器名称; 选中使用SQL Server身份validation,在单击下一步>button之前,input用户名,密码和数据库。
  7. 在“select源表格和视图”窗口中,单击“下一步>”button之前,可以编辑映射。
  8. 选中立即运行并单击下一步>button。
  9. 点击完成button运行包。

参考