我正在寻找使用导入.csv文件到SQL Server的帮助BULK INSERT,我有几个基本问题。
.csv
SQL Server
BULK INSERT
问题:
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赞||。代码看起来像这样,它将完美地处理逗号和单斜杠。
FIELDTERMINATOR赞||
2)如果客户端从excel创建csv,则将逗号分隔的数据括在” … “(双引号)中(如下例所示),那么导入如何处理呢?
如果您使用的是大容量插入,则无法处理双引号,数据将以双引号插入行中。将数据插入表后,您可以将这些双引号替换为’ ‘。
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 )