Eri*_* J. 49 sql-server csv bulkinsert
我正在尝试导入正确引用的CSV文件,这意味着只有在包含逗号的情况下才会引用数据,例如:
41, Terminator, Black
42, "Monsters, Inc.", Blue
Run Code Online (Sandbox Code Playgroud)
我观察到第一行正确导入,但第二行错误以建议引用的逗号被视为字段分隔符.
我见过这样的建议
更改字段终止符
FIELDTERMINATOR = ' ""'
但是,我的CSV文件仅引用需要它的字段,因此我不相信该建议会起作用.
SQL Server的BULK IMPORT语句可以导入正确引用的CSV文件吗?怎么样?
iru*_*var 28
不幸的是,SQL Server将引用的逗号解释为分隔符.这适用于BCP和批量插入.
来自http://msdn.microsoft.com/en-us/library/ms191485%28v=sql.100%29.aspx
如果数据中出现终止符,则将其解释为终结符,而不是数据,并将该字符后的数据解释为属于下一个字段或记录.因此,请仔细选择终结器,以确保它们永远不会出现在您的数据中.
Raf*_*via 18
还有另一种解决方案.
通过编辑fmt文件,将引号视为字段分隔符的一部分.
您可以查看此信息以获取更多信息:
以上链接的摘录:
删除引号的唯一方法是修改导入操作期间指定的列分隔符.这里唯一的缺点是,如果您检查要插入的数据,您将很快意识到每个列的列分隔符是不同的(上面突出显示的分隔符).
因此,要为每列指定不同的列分隔符,如果计划使用批量插入或BCP,则需要使用格式文件.如果为上述表结构生成格式文件,则如下所示:
9.0
3
1 SQLCHAR 0 5 "\t" 1 FName SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 5 "\t" 2 LName SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 50 "\r\n" 3 Company SQL_Latin1_General_CP1_CI_AS
Run Code Online (Sandbox Code Playgroud)
修改格式文件以表示每列的正确列分隔符.要使用的新格式文件如下所示:
9.0
4
1 SQLCHAR 0 0 "\"" 0 FIRST_QUOTE SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 5 "\",\"" 1 FNAME SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 5 "\",\"" 2 LNAME SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 50 "\"\r\n" 3 COMPANY SQL_Latin1_General_CP1_CI_AS
Run Code Online (Sandbox Code Playgroud)
小智 13
我知道这是一个古老的话题,但是这个功能现在已经从SQL Server 2017开始实现了.您正在寻找的参数是FIELDQUOTE =默认为'"'.详见https://docs.microsoft.com/en -us/SQL/T-SQL /语句/批量嵌件的Transact-SQL?视图= SQL服务器-2017
小智 5
我遇到了同样的问题,我不想走 SSIS 路线,所以我找到了一个 PowerShell 脚本,它易于运行并处理该特定字段中带逗号的引号的情况:
PowerShell 脚本的源代码和 DLL:https : //github.com/billgraziano/CsvDataReader
这是一个解释用法的博客:http : //www.sqlteam.com/article/fast-csv-import-in-powershell-to-sql-server
归档时间: |
|
查看次数: |
93163 次 |
最近记录: |