sql server大容量插入包含逗号数据的csv
下面是csv的示例行sql server大容量插入包含逗号数据的csv,sql,sql-server,csv,bulkinsert,Sql,Sql Server,Csv,Bulkinsert,下面是csv的示例行 012,12/11/2013,"<555523051548>KRISHNA KUMAR ASHOKU,AR",<10-12-2013>,555523051548,12/11/2013,"13,012.55", 有什么解决方案吗?不幸的是,SQL Server导入方法(BCP和大容量插入)不理解引用“” 来源:答案是:你不能那样做。看 “从CSV文件导入数据 SQL Server批量导入操作不支持逗号分隔值(CSV)文件。但是,在某些情况下,CS
012,12/11/2013,"<555523051548>KRISHNA KUMAR ASHOKU,AR",<10-12-2013>,555523051548,12/11/2013,"13,012.55",
有什么解决方案吗?不幸的是,SQL Server导入方法(BCP和大容量插入)不理解引用“”
来源:答案是:你不能那样做。看 “从CSV文件导入数据 SQL Server批量导入操作不支持逗号分隔值(CSV)文件。但是,在某些情况下,CSV文件可以用作将数据批量导入SQL Server的数据文件。有关从CSV数据文件导入数据的要求的信息,请参阅为批量导出或导入准备数据(SQL Server)。”
一般的解决方案是,您必须将CSV文件转换为可以成功导入的文件。您可以通过多种方式实现这一点,例如使用不同的分隔符(如TAB)创建文件,或者使用理解CSV文件(如Excel或多种脚本语言)的工具导入表,然后使用唯一的分隔符(如TAB)导出表,您可以从中大容量插入。我最近遇到了这个问题,必须切换到制表符分隔格式。如果您这样做,并使用SQLServerManagementStudio进行导入(右键单击数据库,然后选择Tasks,然后选择import)选项卡delimited工作正常。带制表符分隔符的大容量插入选项也应起作用
我必须承认,当发现MicrosoftSQLServer有这个逗号分隔的问题时,我感到非常惊讶。CSV文件格式非常旧,因此发现这是现代数据库的一个问题非常令人失望。批量插入非常快,但不是很灵活。能否将数据加载到临时表中,然后将所有内容推送到生产表中?一旦进入SQL Server,您将可以更好地控制如何将数据从一个表移动到另一个表。所以,基本上
1) Load data into staging
2) Clean/Convert by copying to a second staging table defined using the desired datatypes. Good data copied over, bad data left behind
3) Copy data from the "clean" table to the "live" table
MS现在已经解决了这个问题,您可以在with子句中使用FIELDQUOTE添加带引号的字符串支持:
FIELDQUOTE = '"',
如果您有SQL Server 2017或更高版本,则with子句中的任何位置都可以做到这一点。他们添加了对SQL Server 2017(14.x)CTP 1.1的支持。大容量插入命令需要使用FORMAT='CSV'输入文件选项 要清楚的是,csv看起来给我带来了问题,第一行很容易解析,第二行包含曲线球,因为引用字段中有一个逗号:
jenkins-2019-09-25_cve-2019-10401,cve-2019-10401,4,jenkins咨询2019-09-25:cve-2019-10401:
jenkins-2019-09-25_cve-2019-10403_cve-2019-10404,“cve-2019-10404,cve-2019-10403”,4,jenkins咨询2019-09-25:cve-2019-10403:cve-2019-10404:
破译的代码
BULK INSERT temp
FROM 'c:\test.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '0x0a',
FIRSTROW= 2
);
工作代码
BULK INSERT temp
FROM 'c:\test.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '0x0a',
FORMAT = 'CSV',
FIRSTROW= 2
);
将其导入临时表并修复。请提供替代解决方案或删除您的答案并留下评论。我认为给出的答案是正确的。无法修改SQL命令以获得所需的结果。CSV文件在上载之前必须经过预处理。选择修改文件的特定工具或技术超出了问题的范围。我对答案稍加修改以使其更清楚。你是说投票率最高的答案?没有一个答案被接受。
BULK INSERT temp
FROM 'c:\test.csv'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '0x0a',
FORMAT = 'CSV',
FIRSTROW= 2
);