我使用bcp导出和导入数据,例如:
bcp "exec db.dbo.procedure" queryout "C:\Users\I\Desktop\ps.dat" -c -r "*" -t; -S -U -P
bcp db.dbo.table in C:\Users\I\Desktop\ps.dat -e "C:\Users\I\Desktop\ps_error.dat" -c -r "*" -t; -m1000000 -S -U -P
如果我在没有-r
的情况下执行这些语句,bcp
会使用默认的CRLF
作为行尾。之后,导入失败,并且数据截断正确。
经过这么多尝试后,我发现CRLF
被检测为两个字节的数据,并且它不适合表格格式。当我使用上述陈述时,它完美无缺。
为什么会这样?这是一个bcp错误,还是预期的行为?
答案 0 :(得分:1)
据MS称,这是预期的行为:
https://docs.microsoft.com/en-us/sql/tools/bcp-utility
本文解释了所有参数,对于这种情况,这些是我们感兴趣的:
-c
使用字符数据类型执行操作。此选项不会提示每个字段;它使用char作为存储类型,没有前缀,并且\ t(制表符)作为字段分隔符,\ r \ n(换行符)作为行终止符。 -c与-w。
不兼容-r
row_term 指定行终止符。默认值为\ n(换行符)。使用此参数可覆盖默认行终止符。有关详细信息,请参阅指定字段和行终止符(SQL Server)。
所以似乎通过删除-r将行终止符设置为\ n(LF),-c接管并将行终止符设置为\ r \ n(CRLF)