我有一个以制表符分隔的文件,该文件具有unicode字符,并以LF作为行尾。当我尝试使用bcp实用程序和-c开关导入此文件时,它会加载到表中,但是,字符不正确。当我尝试使用-w开关时,它无法加载,并出现以下错误。
"[Microsoft][ODBC Driver 17 for SQL Server]在BCP数据文件"中遇到意外EOF;
以下是文件中的文本
ialgcd ianvmn sourceVersion
PT Português 2021-06-W24
SP español 2021-06-W24
EG English 2021-06-W24
FR Français 2021-06-W24
GE Deutsch 2021-06-W24
RU Русский 2021-06-W24
PB Português(Brazil) 2021-06-W24
KR 한국어 2021-06-W24
CH 中文 2021-06-W24
如果我以下面的方式使用-c开关,它加载时不会出错。但是字符不正确
bcp TableName1 in DelimitedFile1.txt -c -T -S Server01 -q -t t -r 0x0A -F2
如果我使用-w开关,它不会加载任何数据并抛出错误
bcp TableName1 in DelimitedFile1.txt -w -T -S Server01 -q -t t -r 0x0A -F2
我尝试了所有不同类型的行终止符和字段终止符的组合,也尝试了使用-N开关,还尝试了使用格式化文件,但都不起作用。
我尝试使用的格式文件是
14.0
3
1 SQLNCHAR 2 510 "t" 1 ialgcd SQL_Latin1_General_CP1_CI_AS
2 SQLNCHAR 2 510 "t" 2 ianvmn SQL_Latin1_General_CP1_CI_AS
3 SQLNCHAR 2 510 "0x0A" 3 sourceVersion SQL_Latin1_General_CP1_CI_AS
我不知道为什么它能用-c开关而不能用-w开关。在文件的开头是否需要BOM字符?
我找到了这个问题的解决方案-w开关适用于Unicode字符,但如果你的文件是UTF-8编码的,那么你必须使用-C(大写C(和代码页码,所以对于UT-8,它将是65001和-C开关(小写C(
所以命令看起来像
bcp TableName1 in DelimitedFile1.txt -c -C 65001 -T -S Server01 -q -t t -r 0x0A -F2