我正在使用批量插入将 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/