2013-11-21 49 views
1

我知道這裏有其他線程關於這個問題,並沒有建議的修復工作。我已經驗證每條記錄末尾的CRLF是一個十六進制'0D0A'。我可以在VBS中替換vbCrLf並替換它們中的每一個。SQL Server批量導入ROWTERMINATOR vbCrLf( n)不工作

這裏是我的製表符分隔文本文件的樣本:

01/16/2013 11:00 HS01 DocLast, DocFirst PA-C Occurred ML 11/20/2012 15:31  
01/07/2013 09:40 HS01 DocLast, DocFirst PA-C Canceled ML 11/20/2012 15:36 Patient Canceled 20130103-57935 

我執行對文本文件,該代碼在存儲過程在SQL Server 2008:

set @sqlcmd = ' 
BULK INSERT #temp_import_records 
FROM ''' + @import_file + ''' 
WITH 
(
ROWTERMINATOR = ''\n'' 
)' 

我試圖將這個文本插入到一個20列的臨時表中。這個數據只有10個字段。用我的代碼,這兩個記錄都被安裝到臨時表中的同一記錄中。我曾嘗試將rowterminator設置爲'0D0A'和'0x0A',但都沒有工作。

我在做什麼錯?

+0

我建議這與準確的10場加載到一個臨時表,然後從該表到選擇決賽桌#temp_import_records。 – laylarenee

+0

問題在於我將多個文件導入到這個臨時表中,並不是所有的文件都有10個字段。我正在使用select查詢來獲取此臨時表的內容,並將數據與其他數據一起導入永久表中。大容量插入不允許我混合其他數據與正在導入的數據,所以我必須使用這兩步過程。 – user3014525

+0

+1。非常好的問問題。 –

回答

1

\n字符只是LF(0A)部分的兩個字符CR+LF(0D0A)行終止符。使用\r爲第一部分:

ROWTERMINATOR = ''\r\n'' 
+1

我也嘗試過。當我這樣做時,我將兩個記錄導入到臨時表中的單個記錄中。 – user3014525

0

我建議還逃逸,像這樣結束:

ROWTERMINATOR = ''\\n''