2017-02-27 50 views
1

我准备格式文件基于This article批量插入不承认行终止

样本数据的导入文本文件合格导入到SQL服务器:

"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') 
手动导入
+0

只是使用'\ n',而不是'\ r \ n'。前者是'回车,换行'(aka,CRLF)。后者是'回车,回车,换行'(CRCRLF)。不知道是否真的能解决这个问题。 (仅供参考,'x0dx0a'是CRLF,所以也许你的报告文件格式不正确,实际的文件格式不正确?) – ps2goat

+0

对不起,如果你已经检查过了,但是有可能'item'的长度超过50? – SqlZim

+0

@SqlZim是的,我通过向导导入它,但它很好。另外我相当确定源字段在另一个数据库中也是varchar(50) – JagdCrab

回答

1

我试图戳你的格式文件,但它只是证实,我对该版本的格式文件没有任何好处。

尽管切换到xml格式文件很容易。

cat.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='"|"' COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR='"|"' COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR='"|"' COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 
<FIELD ID="5" xsi:type="CharTerm" TERMINATOR='"|"' COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 
<FIELD ID="6" xsi:type="CharTerm" TERMINATOR='"\r\n' COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 
</RECORD> 
<ROW> 
<COLUMN SOURCE="2" NAME="transaction_id" xsi:type="SQLVARYCHAR"/> 
<COLUMN SOURCE="3" NAME="user_id" xsi:type="SQLVARYCHAR"/> 
<COLUMN SOURCE="4" NAME="create_date" xsi:type="SQLVARYCHAR"/> 
<COLUMN SOURCE="5" NAME="category" xsi:type="SQLVARYCHAR"/> 
<COLUMN SOURCE="6" NAME="item" xsi:type="SQLVARYCHAR"/> 
</ROW> 
</BCPFORMAT> 

SQL:

bulk insert dbo.cat 
    from 'c:\cat.txt' 
    with (
     formatfile = 'c:\cat.xml' 
    , firstrow = 1 
); 

结果:

enter image description here

输入文件,显示在记事本++行终止:

enter image description here

+0

这样做的伎俩。所以这可能是格式文件本身格式化一些格式问题。谢谢。 – JagdCrab

+0

@JagdCrab乐于帮助! – SqlZim