【发布时间】:2017-07-18 09:32:49
【问题描述】:
我正在准备格式文件,以基于This article将文本限定文件导入sql-server
导入数据示例:
"1000000"|"1100000"|"2017-02-26 00:00:00"|"CAT1"|"Item from CAT1"
"1000001"|"1100000"|"2017-02-26 00:00:01"|"CAT2"|"Item from CAT2"
"1000002"|"1100001"|"2017-02-26 00:01:02"|"CAT2"|"Item from CAT2"
"1000003"|"1100002"|"2017-02-26 01:02:03"|"CAT3"|"Item from CAT3"
我的格式文件:
13.0
6
1 SQLCHAR 0 0 "\"" 0 FIRST_QUOTE SQL_Latin1_General_CP1_CI_AS
2 SQLINT 0 4 "\"|\"" 1 transaction_id ""
3 SQLINT 1 4 "\"|\"" 2 user_id ""
4 SQLDATETIME 0 8 "\"|\"" 3 create_date ""
5 SQLCHAR 2 10 "\"|\"" 4 category SQL_Latin1_General_CP1_CI_AS
6 SQLCHAR 2 50 "\"\r\n" 5 item SQL_Latin1_General_CP1_CI_AS
结果:
批量加载失败。数据文件中第 1 行第 6 列的列太长。请验证是否正确指定了字段终止符和行终止符。
我相当确定该文件包含 \r\n(使用十六进制编辑器检查显示 0x0d,0x0a),尽管忽略文本限定符和格式文件我只能手动导入它
Bulk insert <table_name> from '\\path\to\file' with (fieldterminator='|', rowterminator='\n')
【问题讨论】:
-
只使用
\n,而不是\r\n。前者是'回车,换行'(又名,CRLF)。后者是'回车,回车,换行'(CRCRLF)。不过,不确定这是否真的解决了问题。 (仅供参考,x0dx0a是 CRLF,所以您报告的文件格式可能不正确,而实际格式没问题?) -
对不起,如果您已经检查过,但是,
item的长度是否有可能超过 50? -
@SqlZim 是的,我通过向导导入了它,并且运行良好。我也相当确定另一个数据库中的源字段也是 varchar(50)
-
@ps2goat 是有道理的。我没有意识到 \n 也包含 CR 部分。但是,我确实尝试将最后一个分隔符更改为 "\"\n" 和 "\n" (忽略最后一个文本限定符),并得到同样的错误。
-
您只向我们展示了 5 列,但错误引用了第六列...如果您向我们提供您所拥有的所有信息,它会帮助我们帮助您。
标签: sql sql-server import bcp