[您首先需要在数据库中创建一个表,您将在其中导入CSV文件。创建表后,请执行以下步骤。
•使用SQL Server Management Studio登录到数据库
我正在寻求使用.csv
将BULK INSERT
文件导入SQL Server的帮助,我有几个基本问题。
问题:
CSV文件数据之间可能有,
(逗号)(例如:描述),那么如何进行导入处理这些数据?
如果客户端从Excel创建CSV,则将逗号分隔的数据括在""
(双引号)中[如下例所示],那么导入如何处理呢?
我们如何跟踪某些行是否包含不良数据,哪些导入会跳过? (导入会跳过不可导入的行)
这里是带有标题的示例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创建csv,则具有逗号括在
" ... "
(双引号)中[如下示例],那么导入如何处理呢?解决方案>>
如果您使用的是大容量插入,则无法处理双引号,数据将被用双引号插入行中。将数据插入表后,可以用“ ”替换那些双引号。
update table set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')
3)我们如何跟踪某些行是否包含不良数据,哪些导入会跳过?(导入会跳过不可导入的行)吗?
解决方案>>
要处理由于无效数据或格式而未加载到表中的行,可以使用ERRORFILE property处理,指定错误文件名,它将写入行错误文件有错误。代码应如下所示。
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 )
[您首先需要在数据库中创建一个表,您将在其中导入CSV文件。创建表后,请执行以下步骤。
•使用SQL Server Management Studio登录到数据库
•右键单击数据库,然后选择
Tasks -> Import Data...
•单击
Next >
按钮•对于数据源,选择
Flat File Source
。然后使用浏览按钮选择CSV文件。在单击Next >
按钮之前,花一些时间配置要如何导入数据。•对于目标,选择正确的数据库提供程序(例如,对于SQL Server 2012,您可以使用SQL Server Native Client 11.0)。输入服务器名称。检查
Use SQL Server Authentication
单选按钮。在单击Next >
按钮之前,输入用户名,密码和数据库。•在“选择源表和视图”窗口上,可以在单击
Next >
按钮之前编辑映射。•选中
Run immediately
复选框,然后单击Next >
按钮。•单击
Finish
按钮运行程序包。在此website上发现了以上内容(我已经使用并测试了它:]
2)如果客户端从excel创建csv,则具有逗号括在“ ...”(双引号)内[如下示例],那么导入如何处理呢?
您应该使用FORMAT ='CSV',FIELDQUOTE ='“'选项:
BULK INSERT SchoolsTemp FROM 'C:\CSVData\Schools.csv' WITH ( FORMAT = 'CSV', FIELDQUOTE = '"', FIRSTROW = 2, FIELDTERMINATOR = ',', --CSV field delimiter ROWTERMINATOR = '\n', --Use to shift the control to next row TABLOCK )
解决数据问题中逗号的最佳,最快和最简便的方法是,在将Windows的列表分隔符设置设置为逗号(例如管道)之外的其他内容之后,使用Excel保存逗号分隔的文件。然后将为您生成一个管道(或其他)分隔的文件,然后可以将其导入。描述为here。
需要将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); } } } } }
] >这是我要解决的方法:
只需将CSV文件另存为excel中的XLS工作表(这样做,您就不必担心定界符。Excel的电子表格格式将被读取为表格并直接导入到SQL表格中)
使用SSIS导入文件
[在导入管理器中编写自定义脚本以省略/修改您要查找的数据。(或运行主脚本来仔细检查您要删除的数据)
祝你好运。>>
由于他们不使用SQL导入向导,因此步骤如下:
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9hVktzMy5wbmcifQ==” alt =“在此处输入图像说明”>
右键单击选项导入任务
数据,一旦向导
打开,我们选择要隐含的数据类型。在这种情况下,它将是平面文件源
我们选择了CSV文件,您可以在CSV中配置表格的数据类型,但是最好从CSV中导入它。
SQL客户端
根据身份验证的类型,我们选择它,一旦完成,就会出现一个非常重要的选项。
启用ID插入
((通常不是从1开始),如果我们在CSV中有一列带有ID的列,则选择启用ID插入,下一步是结束向导,我们可以在此处查看更改。
另一方面,在接下来的窗口中可能会出现警报,或者警告,如果它们留下错误,则最好忽略此]。 首先打开excel,然后将其导入DATA,从TXT文件导入,选择将保留0个前缀值的csv扩展名,然后将该列另存为TEXT,因为excel会删除前导0,否则将该文件导入Excel。如果您在以0 [零]开头的字段中包含数字数据,请双击以使用Excel打开。然后只需另存为制表符分隔文本文件即可。当您导入到excel中时,您可以选择另存为GENERAL,TEXT等。选择TEXT,这样还可以保留诸如YourCompany,LLC之类的字段中字符串中间的引号... 我希望我可以使用FORMAT和Fieldquote功能,但是我的SSMS版本似乎不支持该功能 我知道已经接受了答案,但是我仍然想分享我的情况,也许可以帮助某人解决他们的问题工具BULK INSERT dbo.YourTableName
FROM 'C:\Users\Steve\Downloads\yourfiletoIMPORT.txt'
WITH (
FirstRow = 2, (if skipping a header row)
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n'
)
SCENARIO
我正在加载CSV格式的数据集,稍后将其显示在视图中我尝试使用批量加载,但由于BULK LOAD
正在使用,因此无法加载FIELDTERMINATOR = ','
并且Excel单元格也使用
,
但是,我也不能直接使用Flat file source
,因为我正在使用Code-First Approach
并仅在SSMS DB中创建了模型,而在后来不得不使用属性的模型中没有这样做。SOLUTION
- 我使用了平面文件源并从CSV文件制作了数据库表(在SSMS中右键单击数据库->导入平面文件->选择CSV路径并按照指示进行所有设置]]]]
Add-Migration
[您首先需要在数据库中创建一个表,您将在其中导入CSV文件。创建表后,请执行以下步骤。
•使用SQL Server Management Studio登录到数据库
2)如果客户端从excel创建csv,则具有逗号括在“ ...”(双引号)内[如下示例],那么导入如何处理呢?
解决数据问题中逗号的最佳,最快和最简便的方法是,在将Windows的列表分隔符设置设置为逗号(例如管道)之外的其他内容之后,使用Excel保存逗号分隔的文件。然后将为您生成一个管道(或其他)分隔的文件,然后可以将其导入。描述为here。
需要将CSV文件导入到数据表中的文件
然后您可以使用SQLBulkCopy插入批量行
这是我要解决的方法:
只需将CSV文件另存为excel中的XLS工作表(这样做,您就不必担心定界符。Excel的电子表格格式将被读取为表格并直接导入到SQL表格中)
由于他们不使用SQL导入向导,因此步骤如下:
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9hVktzMy5wbmcifQ==” alt =“在此处输入图像说明”>
右键单击选项导入任务
数据,首先打开excel,然后将其导入DATA,从TXT文件导入,选择将保留0个前缀值的csv扩展名,然后将该列另存为TEXT,因为excel会删除前导0,否则将该文件导入Excel。如果您在以0 [零]开头的字段中包含数字数据,请双击以使用Excel打开。然后只需另存为制表符分隔文本文件即可。当您导入到excel中时,您可以选择另存为GENERAL,TEXT等。选择TEXT,这样还可以保留诸如YourCompany,LLC之类的字段中字符串中间的引号...
BULK INSERT dbo.YourTableName FROM 'C:\Users\Steve\Downloads\yourfiletoIMPORT.txt' WITH ( FirstRow = 2, (if skipping a header row) FIELDTERMINATOR = '\t', ROWTERMINATOR = '\n' )
我希望我可以使用FORMAT和Fieldquote功能,但是我的SSMS版本似乎不支持该功能
我知道已经接受了答案,但是我仍然想分享我的情况,也许可以帮助某人解决他们的问题工具