我正在寻找帮助,以导入一个.csv文件到SQL Server使用BULK INSERT,我有几个基本的问题.

Issues:

  1. CSV文件数据之间可能有,(逗号)(例如:description),那么我如何进行导入来处理这些数据呢?

  2. 如果客户机从Excel创建CSV,那么带有逗号的数据将被括在""(双引号)内[如下例],那么导入如何处理?

  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文件数据之间可能有,(逗号)(例如:

Solution

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

2) 如果客户端从excel创建csv,则

Solution

如果使用批量插入,则无法处理双引号,数据将被删除

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

3) 我们如何跟踪某些行是否有坏数据,哪些导入会跳过?

Solution

要处理由于无效数据或格式而未加载到表中的行,可以

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
    )

Sql相关问答推荐

在postgresql中使用来自另一个字段的日期名称作为JSONB查询中的关键字

SQL查询以创建手头的流动余额?

Snowflake SQL比较克隆x原始计数

如果开始期间不存在PostgresSql回填数据

解析SQL Server中的嵌套JSON

防止ActiveRecord迁移在db/structure.sql中进行巨大更改

不同表达方式时的大小写

使用Kotlin Exposed SQL DSL Select 多个值并排序

根据Rails活动记录中时间戳/日期时间的时间部分从PostgreSQL中提取记录

来自按PostgreSQL分组的最小日期

将一个数组反嵌套到另外两个数组SQL中(Athena/presto)

MS Access问题查询中的自定义字段

使用拆分器将已分组的不同值连接在一起

两个月之间的WHERE CASE WHEN-ORA-00905:缺少关键字

根据日期 Select ID 的上一条记录

替换SQL Server XML中多处出现的 node 值

试图找到两个身份列表的交集(列表的长度不同),但获取列 id 不明确?

SQL ORACLE - 查找连续天数

汇总具有连续日期范围的行

As400 (IBM i) SQL 表 QSYS2.SYSTABLES 上的元数据