[转]BCP 数据导入问题 Unix系统中的文本文件换行符引发的问题

UNIX 数据文件(行末为<LF>)Windows下的<CR><LF>(回车换行) 

文件末尾格式为C.TXT

A | 12452 | 212 | 1245 | DE | A | <LF>      
A | 12452 | 212 | 1245 | DE | A | <LF>  
A | 12452 | 212 | 1245 | DE | A | <LF>  


 BCP DB1.dbo.Test IN C.TXT   -C -T" | " -r"\n" -U"SA" -P"PWD"

我设置了分割符 \n 但是windows下\n默认是 回车+换行 (<CR><LF>)

因此无法导入数据

报出的错误为:

 

NULL
Starting copy...
SQLState = 22001, NativeError = 0
Error = [Microsoft][SQL Native Client]String data, right truncation
NULL
0 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 47    
NULL

 

因为无法在行结束的时候识别出来,所以最后面的字符都被当成最后一列的数据,造成字符长度过长。

 

查找了很久的资料,最后只能使用转换的方式,把txt文件进行转换后再BCP读入数据库

BAT文件如下:

 

@echo off
(for /f "delims=" %%a in (c.txt) do echo %%a)>转换.txt

 

 

转换后的数据就可以正常读入了。

-----------------------------------------------------------------------------------------------------------------------

补充:

fmt文件格式如下,红色部分\n表示<LF>,\r表示<CR>

10.0
107
1 SQLCHAR 0 7 "\t" 1 ticket_office_no Chinese_PRC_CI_AS
2 SQLCHAR 0 3 "\t" 104 inner_code Chinese_PRC_CI_AS
3 SQLCHAR 0 2 "\n" 105 location_code Chinese_PRC_CI_AS
3 SQLCHAR 0 0 "" 0 CREATE_TIME ""

posted @ 2012-05-03 09:39  alanlau  阅读(266)  评论(0编辑  收藏  举报