从缺少值的 csv 文件中批量插入 (SQL)

Posted

技术标签:

【中文标题】从缺少值的 csv 文件中批量插入 (SQL)【英文标题】:Bulk Insert (TSQL) from csv file with missing values 【发布时间】:2014-07-09 15:18:36 【问题描述】:

问题:

我有一张桌子

CREATE TABLE BestTableEver 
    (
    Id INT,
    knownValue INT,
    unknownValue INT DEFAULT 0,
    totalValue INT DEFAULT 0);

我有这个 CSV 文件 (Loki.csv)

Id, knownValue, unknownValue, totalValue 
1, 11114
2, 11135
3, 11235

我想对表进行批量插入,由于我还不知道 unknownValue 和 totalValue 的值,我希望它们采用默认值(在表创建中定义)

我目前的做法

create procedure populateLikeABoss
@i_filepath NVARCHAR(2048)
DECLARE @thor nvarchar(MAX)
    SET @thor=
        'BULK INSERT populateLikeABoss
        FROM ' + char(39) + @i_filepath + char(39) +
        'WITH
        (
            FIELDTERMINATOR = '','',
            ROWTERMINATOR = ''\n'',
            FIRSTROW = 2,
            KEEPNULLS
        )'
    exec(@thor)
END

并调用过程来做魔术

populateLikeABoss 'C:\Loki.csv'

错误

批量加载数据转换错误(类型不匹配或无效字符 对于指定的代码页)第 2 行第 2 列 (sizeOnMedia)。

参考文献

使用批量插入保持 NULL 值

Microsoft

没有我需要的答案的类似问题

***

【问题讨论】:

我认为 csv 不是预期的格式。为了保持为空,每行中的记录应为 1、11114。其他选项是删除标题中的最后两列。 我省略了 FIRSTROW = 2 的标题。但 ',' 成功了。我现在觉得很傻。谢谢 @KiranHegde 您应该将其发布为答案,因为它解决了 OP 的问题。 【参考方案1】:

我认为 csv 不是预期的格式。为了保持为空,每行中的记录应采用1, 11114,, 格式。其他选项是删除标题中的最后两列。

【讨论】:

以上是关于从缺少值的 csv 文件中批量插入 (SQL)的主要内容,如果未能解决你的问题,请参考以下文章

从 Excel / CSV 批量插入到 SQL Server

在 SQL Server 中批量插入部分引用的 CSV 文件

使用 pyodbc 批量插入 SQL Server 表:找不到文件

批量从 SQL Server 检索数据

使用 JooQ 从 CSV 中“批量插入”并同时跟踪插入的记录?

如何从 SQL *PLUS 中的批量插入中查找失败的插入语句