使用BCP导出视图到CSV,如何配置回车换行分隔并解决报错?
解决BCP导出CSV时用\r\n分隔行的报错问题
问题原因
- XML格式文件中
<RECORD>定义了3个<FIELD>,但<ROW>仅对应2个数据库列,BCP导出操作不允许文件字段数量多于数据库列数(仅导入支持跳过字段),触发Host-file columns may be skipped only when copying into the Server错误。 - 多余的
<FIELD>指定了COLLATION属性但无对应列关联,导致Unable to resolve column level collations错误。
正确配置方案
无需添加空字段,只需给最后一个数据库列对应的文件字段指定\r\n作为行终止符即可。以下是两种适配场景的配置:
场景1:标准CSV格式(字段用逗号分隔,行用\r\n分隔)
替换原XML格式文件为:
<?xml version="1.0"?> <BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <RECORD> <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," COLLATION="SQL_Latin1_General_CP1_CI_AS" /> <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" COLLATION="SQL_Latin1_General_CP1_CI_AS" /> </RECORD> <ROW> <COLUMN SOURCE="1" NAME="Id_ein_empr" xsi:type="SQLNVARCHAR" LENGTH="9" /> <COLUMN SOURCE="2" NAME="Emp_Loc_nbr" xsi:type="SQLNVARCHAR" LENGTH="3" /> </ROW> </BCPFORMAT>
场景2:固定长度格式(字段保留固定长度,行用\r\n分隔)
如果需要保持字段固定长度,可将行终止符绑定到最后一个字段的终止规则:
<?xml version="1.0"?> <BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <RECORD> <FIELD ID="1" LENGTH="9" xsi:type="CharFixed" COLLATION="SQL_Latin1_General_CP1_CI_AS" /> <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="\r\n" COLLATION="SQL_Latin1_General_CP1_CI_AS" /> </RECORD> <ROW> <COLUMN SOURCE="1" NAME="Id_ein_empr" xsi:type="SQLNVARCHAR" LENGTH="9" /> <COLUMN SOURCE="2" NAME="Emp_Loc_nbr" xsi:type="SQLNVARCHAR" LENGTH="3" /> </ROW> </BCPFORMAT>
注意事项
- 确保BCP脚本中格式文件路径
C:\csv\Format_FL.xml正确指向修改后的文件。 - 执行脚本的账户需拥有目标目录的读写权限。
内容的提问来源于stack exchange,提问作者Rasik
相关产品推荐
相关产品推荐

