2017-02-27 52 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