Sql-Server

格式文件中的欄位終止符問題

  • November 25, 2016

我有一個 txt 格式的數據文件,我曾經在以下命令中使用 Bulk Insert 載入它:

Bulk insert [table1]
FROM 'data.txt'  
WITH   
 ( 
    FIELDTERMINATOR ='|',
    ROWTERMINATOR ='0x0a',
 )

程式碼執行良好。但是,當我嘗試使用帶有批量插入的格式文件來載入文件時,在為最後一行指定欄位終止符時遇到了一些問題。

這是格式文件中最後一行的規範:

21  SQLCHAR  0  20  "0x0a"  21  misc_costs       SQL_Latin1_General_CP1_CI_AS

使用“0x0a”作為終止符,我收到以下錯誤:

第 2 行第 1 列 (var1) 的批量載入數據轉換錯誤(截斷)。

用“\n”可以載入數據,但是用“|” 也載入到最後一列。例如,我得到“0.5|” 而不是“0.5”。

“|\n”,“0x0a”,"|0x0a",’\r\n’ 返回與 “|” 相同的錯誤

第 2 行第 1 列 (var1) 的批量載入數據轉換錯誤(截斷)。

我正在使用 sql-server 2016,Windows 10 64 位。

有人能幫忙嗎?在此先感謝您的幫助!

傑森

經過一整天的換行/十六進制程式碼,我終於發現我的問題是由於格式文件中缺少列引起的。該數據集對我來說是新的,我認為它有 21 行,而實際上它有 22 行。這就是為什麼sql server一直載入最後一個“|” 從數據文件。

這是其他可能對使用不同於 Windows 的行終止符的 UNIX 系統載入數據文件感興趣的人的參考,有以下三種方法:

  1. 使用批量插入並將行終止符設置為“0x0a”。
  2. 使用格式文件並將最後一個欄位的欄位終止符設置為“\n”。
  3. 使用帶有函式 Char(10) 的動態 sql 將換行符 (LF) 插入命令字元串,然後 exec() 命令字元串。

在嘗試這些方法之前,請使用記事本顯示所有控製字元以確認文本文件使用的控製字元。

如果這些方法都不適合您,您可能會遇到除換行符/行終止符之外的一些問題。

引用自:https://dba.stackexchange.com/questions/156389