Tsql 大容量插入csv-列值本身有逗号

Tsql 大容量插入csv-列值本身有逗号,tsql,sql-server-2012,Tsql,Sql Server 2012,“活动”列中的值在文本中带有逗号 csv中的某些记录: Name,Project,Activity,Hrs John,,,7.1 ,Junkie,,7.1 ,,Reviewing the,file,7.1 //This is under 'Activity' column and it has a comma in the text 当我使用批量插入时,我得到了此行的“批量加载数据转换”。如果去掉这一行或那句话中的逗号,一切正常 请让我知道在这种情况下有哪些选择。我有许多csv文件,每个文件可

“活动”列中的值在文本中带有逗号

csv中的某些记录:

Name,Project,Activity,Hrs
John,,,7.1
,Junkie,,7.1
,,Reviewing the,file,7.1 //This is under 'Activity' column and it has a comma in the text
当我使用批量插入时,我得到了此行的“批量加载数据转换”。如果去掉这一行或那句话中的逗号,一切正常


请让我知道在这种情况下有哪些选择。我有许多csv文件,每个文件可能都有许多这样的值。

如果我有这个问题,并且csv文件的创建不在我的控制之下,我会求助于以下Perl脚本:

open(my $fhin, "<", "MyFile.csv");
open(my $fhout, ">", "MyQFile.csv");

while (my $line = <$fh>) {
  chomp($line);
  $line =~ s/^([^,]*),([^,]*),(.*),([^,]*)$/\"$1\",\"$2\",\"$3\",\"$4\"/;

  print $fhout $line . "\n";
}
open(my$fhin,”,“MyQFile.csv”);
while(我的$line=){
chomp($line);
$line=~s/^([^,]*)、([^,]*)、(.*)、([^,]*)$/\“$1\”、\“$2\”、\“$3\”、\“$4\”/;
打印$fhout$行。“\n”;
}

请注意,上面的正则表达式只能处理一个此类“问题”列。如果还有其他问题,就不可能通过编程方式为这些列指定正确的引号(没有更多信息…。

我遇到过一个类似的问题,文本字符串中有一个逗号。我使用以下字段终止符来解析

字段终止符='\t'


这在CSV上不起作用,我不得不将文件另存为.txt

如果带逗号的字段没有正确引用,那么它首先不是一个有效的CSV文件。@Pointy根据定义,它是。是否可以使用不同的分隔符重新创建文件,例如
甚至
|
?@ignaces什么“定义”?如果没有引用字段分隔符的机制,就不可能明确地解析文件内容。如果内容来自某个外部源,因此无法更改源创建机制,则另一个选项是强制插入引号或使用脚本自行更改分隔符。考虑一个ReXEP类似<代码> /^([^,] *),([^,] *),([^,] *)$/\“$ 1 \”,“\ $ 2”,\“$ 3”,\“4美元”/<代码>如果您的文件被保证没有这个问题的其他列。如果“问题列”不是第二个到最后一列,贪婪的<代码>(/*)< /代码>是否消耗太多的线?@ PosiTy:我不知道你的意思;我为每个无问题的列指定了“非逗号”后跟“逗号”,并指定了行首和行尾,这意味着一个匹配中至少有三个逗号,并且至少三个捕获组中不能有逗号。有没有一个案例打破了这一点?哦,我明白你的意思了-显式逗号会迫使正则表达式后退。那么好:)那么你建议移动问题(现在带标签的文本会导致问题)而不是修复它?