C# 当csv文件列值包含字段终止符值时,如何避免批量插入SQL中的异常

C# 当csv文件列值包含字段终止符值时,如何避免批量插入SQL中的异常,c#,sql-server,csv,bulkinsert,C#,Sql Server,Csv,Bulkinsert,我有一个csv文件,几乎没有列,地址列包含如下值: 纽杰西格林公园酒店路詹姆斯街 这是我的批量插入脚本;当地址字段没有“,”时,其工作正常。由于与脚本中的FieldTerminator值匹配,其将地址字段值逗号视为字段终止符,因此值的剩余部分将移动到下一个字段。作为客户给定的csv文件,我们无法对其进行任何更改。因此,如何使其工作而不丢失地址字段中的逗号 提前谢谢。 试试这个 哦,抱歉,然后使用它允许您选择然后插入。 因此,在选择之后,您可以清理数据,然后插入 INSERT INTO d

我有一个csv文件,几乎没有列,地址列包含如下值:

纽杰西格林公园酒店路詹姆斯街

这是我的批量插入脚本;当地址字段没有“,”时,其工作正常。由于与脚本中的FieldTerminator值匹配,其将地址字段值逗号视为字段终止符,因此值的剩余部分将移动到下一个字段。作为客户给定的csv文件,我们无法对其进行任何更改。因此,如何使其工作而不丢失地址字段中的逗号

提前谢谢。 试试这个

哦,抱歉,然后使用它允许您选择然后插入。 因此,在选择之后,您可以清理数据,然后插入

INSERT INTO 
  dbo.NPI_tbl
SELECT *
FROM 
  OPENROWSET(BULK 'd:\npiData\yourfilename.csv',
  FORMATFILE = 'd:\npiData\npiFormat_c.fmt'
  ) AS e;

为什么假定内容是“詹姆斯街,格林公园酒店路,纽杰西”,而不是“詹姆斯街”?只是因为假定有一个文本分隔符,
。如果它是
?BULK INSERT不是CSV导入工具,它的名字就是这么说的——一种批量导入工具,其任务是在不解析的情况下尽可能快地加载数据。我刚才提到了双引号中的地址字段值。其实没有“字段值中的双引号表示您根本没有地址字段。您有3个字段。如果不使用双引号,任何人都猜不出这是一个字段还是多个字段。该副本演示了如何使用格式文件为每列使用不同的分隔符,包括文本限定符。如果无法确定一个字段是一个字段还是三个字段,则无法导入带有逗号的单个字段。尝试更改导出脚本以使用文本限定符或不可能出现在文本中的字段分隔符,例如选项卡、
|
·
。制表符分隔文件是处理此类问题的最简单方法。这将丢弃行,而不是导入行。这一个跳过有格式问题的行。我已添加了我的csvfile@Kumar..the脚本获取错误“XML解析:第1行,字符0,一个根元素”。您为什么这么早找到它?首先学习使用openrowset。学习使用formatfile。如果fmt不工作,则使用txt文件。
INSERT INTO 
  dbo.NPI_tbl
SELECT *
FROM 
  OPENROWSET(BULK 'd:\npiData\yourfilename.csv',
  FORMATFILE = 'd:\npiData\npiFormat_c.fmt'
  ) AS e;