sql-server - 批量插入 fmt 文本限定符

标签 sql-server ssis bulkinsert bcp

我有一个 BULK INSERT 任务,它从 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.

我已经尝试了一些其他的组合,但就是无法做到这一点。非常感谢任何帮助或指导。

最佳答案

并没有真正回答您关于格式文件的问题,而是一个可能让您工作的解决方案。

格式化文件对我来说是 1980 年代难以理解的奥秘,批量插入非常挑剔和无情。因此,我倾向于使用几行 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' )

希望这对您有所帮助。

关于sql-server - 批量插入 fmt 文本限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38305805/

相关文章:

sql-server - 在 SSIS 包中存储密码

c# - 如何设置 SQL Server LocalDB 在客户端机器上运行?

sql-server - SSIS 找不到变量

sql - SSIS 脚本组件 - 仅用于更改变量

database - PostgreSQL - SQL 状态 : 42601 syntax error

sql-server - "Column is too long"批量插入错误

c# - 快速插入 SQL 数据和相关行的最佳方法是什么?

sql - DISTINCT 与 PARTITION BY 对比 GROUPBY

sql-server - 使用Splunk查询json数据

sql - 这两个 SQL 语句之间是否有任何性能或功能差异?