Sql-Server
格式文件中的欄位終止符問題
我有一個 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 系統載入數據文件感興趣的人的參考,有以下三種方法:
- 使用批量插入並將行終止符設置為“0x0a”。
- 使用格式文件並將最後一個欄位的欄位終止符設置為“\n”。
- 使用帶有函式 Char(10) 的動態 sql 將換行符 (LF) 插入命令字元串,然後 exec() 命令字元串。
在嘗試這些方法之前,請使用記事本顯示所有控製字元以確認文本文件使用的控製字元。
如果這些方法都不適合您,您可能會遇到除換行符/行終止符之外的一些問題。