c# - 带有可选文本限定符的批量插入

标签 c# sql sql-server csv bulkinsert

我正在使用批量插入将 csv 导入数据库。 它是逗号分隔的 csv 文件。所有字段都没有文本限定符。

但有些字段可能会将逗号作为数据的一部分。 例如,ADDRESS 字段值。这些值用双引号括起来。 只有当字段值中包含逗号时,这些双引号才会出现,否则值不会被双引号括起来。 因此,在某些行中,ADDRESS 值用双引号括起来,但在其他行中则没有。 有没有办法在批量插入命令中指定文本限定符?

我尝试使用格式文件选项批量插入。

BULK INSERT Test_Imported FROM 'C:\test.csv' 
WITH (FIRSTROW=0,FIELDTERMINATOR = ',',ROWTERMINATOR = '\n',FORMATFILE = 'C:\test.Fmt')

但我无法在格式文件中将双引号作为可选的文本限定符提及。

附言: 这个函数实际上是更大模块的一部分,它是用 c# 编写的。 从 C# 调用批量插入命令。

csv 文件来自另一个自动化系统的电子邮件。我无法控制格式 csv 文件。大约有 150 列。 每个 csv 文件中平均有 12000 行。 忘记指定数据库。它是 SQL Server 2005。

最佳答案

不幸的是,您必须预处理文件以使其保持一致。 SQL 批量操作拆分字段分隔符上的字符串。

一些选项:

  • 在 C# 中处理,将未被引号包围的逗号更改为管道 (|)
  • 将文件分成 2 个:“和非”文件。这仅在同一字段具有“

你说你无法控制格式,但你拥有的是无法使用的......

关于c# - 带有可选文本限定符的批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1378526/

相关文章:

c# - 将信息记录到 azure webjobs 日志文件中?

mysql - 查询单个表作为主表和详细信息并对结果进行排序,其中主行将位于每个详细信息的顶部

mysql - 无法运行 mysql count (*)

sql - 两个 T-SQL 查询的交集

sql-server - 使用 Entity Framework Core 进行审计跟踪

sql-server - 存储过程中查询的不同执行计数

c# - 将 ZPL 字符串转换为 JPG 图像和 PDF

c# - 为什么在单元测试中实例化ListView时SelectedIndices和SelectedItems不起作用?

c# - 如何缩进 MultiSelectBox 中的值?

php - 通过未知的常用单词在 MySQL 中查找匹配项