Sql server 批量插入fmt文本限定符

Sql server 批量插入fmt文本限定符,sql-server,ssis,bulkinsert,bcp,Sql Server,Ssis,Bulkinsert,Bcp,我有一个批量插入任务,它从csv获取数据并导入到表中。唯一的问题是其中一列可能包含逗号,因此导入无法按预期工作 我试图通过创建一个格式(fmt)文件来解决这个问题,我在下面详细介绍了该文件的内容:- 9.0 6 1 SQLCHAR 0 50 "," 1 "Identifier" Latin1_General_CI_AS 2 SQLCHAR 0

我有一个批量插入任务,它从csv获取数据并导入到表中。唯一的问题是其中一列可能包含逗号,因此导入无法按预期工作

我试图通过创建一个格式(fmt)文件来解决这个问题,我在下面详细介绍了该文件的内容:-

9.0
6
1       SQLCHAR       0       50      ","       1     "Identifier"                                 Latin1_General_CI_AS
2       SQLCHAR       0       50      ","       2     "Name"                                             Latin1_General_CI_AS
3       SQLCHAR       0       50      ","       3     "Date of Birth"                                            Latin1_General_CI_AS
4       SQLCHAR       0       50      ","       4     "Admission"                                                Latin1_General_CI_AS
5       SQLCHAR       0       50      ","       5     "Code"                               Latin1_General_CI_AS
6       SQLCHAR       0       50      "\r\n"   6     "Length"                                                      Latin1_General_CI_AS
引起我痛苦的一栏是第2栏“名称”

我已经尝试了几种方法来识别该列是否为文本限定列并包含逗号,但没有得到我想要的结果

如果我更改为以下内容:-

“\”,“
-我得到这样的东西--“Richardson,Mat

这是不正确的,所以我尝试了这个,正如在其他一些论坛/网站上建议的那样:-

"\",\""
这根本不起作用,实际上给了我一个错误

Cannot obtain the required interface ("IID_IColumnsInfo") from OLE DB provider "BULK" for linked server "(null)".Bulk load: An unexpected end of file was encountered in the data file.

我试过其他几种组合,但都做不好。任何帮助或指导都将不胜感激。

不是真正回答您关于格式化文件的问题,而是一个可能的解决方案

格式文件在20世纪80年代对我来说是难以理解的奥秘,大容量插入是超级挑剔和无情的。因此,我倾向于使用几行powershell来清理数据。下面是我最近使用的一个示例,用于将CSV转换为管道分隔,删除输出上的一些随机引号,并允许在记录中使用逗号:

Import-Csv -Path  $dirtyCsv | 
ConvertTo-CSV  -NoType -Delimiter '|' | 
%{ $_.Replace('"','') } | 
Out-File $cleanCsv
你明白了

然后简单地导入:

BULK INSERT SomeTable FROM 'clean.csv' WITH ( FIRSTROW = 2, FIELDTERMINATOR = '|', ROWTERMINATOR = '\n' )
希望这有帮助