我的CSV文件有几个数据列。
CSV文件看起来像
field1:Test1
field2:Test2
field3:Test3,Test4,Test5
在这种情况下,我可以将哪个库用作字段终止符,我的意思是如果我使用此查询将CSV文件插入到shopifyitem
表中,因为您假设数据字段未正确插入
BULK INSERT shopifyitem
FROM 'c:\test.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
那么我可以使用字段终止符吗?
提前非常感谢....
答案 0 :(得分:1)
如果没有某种类型的预处理,我认为您无法导入该格式。正如Aaron暗示的那样,那不是标准的CSV。
如果无法重新格式化文件,有几种方法可以将数据转换为可导入的格式:
http://www.timmitchell.net/post/2013/01/14/ragged-flat-file-processing-in-ssis/
http://www.rad.pasfu.com/index.php?/archives/38-Script-Component-as-Source-SSIS.html
http://msdn.microsoft.com/en-us/library/ms136060.aspx(向下滚动到“平面文件来源示例”)
这些都是SSIS解决方案,它们利用.NET进行大部分工作。我更喜欢SSIS,因为内置的生产力工具。它可以使用任何文本处理器,如控制台应用程序或PowerShell脚本(如果你真的有时间在你的手上)。
我更喜欢带有流阅读器的脚本组件源,但Tim Mitchell有一个有趣的选择。
答案 1 :(得分:0)
这是将text或csv文件导入数据库的代码:
String SQL = "BULK INSERT [staging_db].[dbo].[TEST] FROM 'D:\\test.txt' WITH (FIELDTERMINATOR = ',',ROWTERMINATOR = '\n')";
答案 2 :(得分:0)
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);
}
}
}
}
}
答案 3 :(得分:0)
尝试使用:
ROWTERMINATOR = '0x0a'