1
我試圖用OPENROWSET查詢csv文件,其工作的時間以及90%,但由於某些原因,一些文件的.csv返回了這個錯誤:SQL:OPENROWSET不返回數據正確
Msg 4863, Level 16, State 1, Line 1
Bulk load data conversion error (truncation) for row 1, column 5 (Status Description).
或這個錯誤:
Msg 4832, Level 16, State 1, Line 1
Bulk load: An unexpected end of file was encountered in the data file.
我的查詢是這樣的:
select * from OPENROWSET(BULK 'E:\File.csv', FORMATFILE= 'E:\schema.xml') AS a
我的格式文件看起來像這樣:
<?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="," MAX_LENGTH="1000" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="1000" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="1000" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="4" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="1000" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
<FIELD ID="5" xsi:type="CharTerm" TERMINATOR="\r\0\n\0" MAX_LENGTH="1000" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="Column1" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="2" NAME="Column2" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="3" NAME="Column3" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="Column4" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="5" NAME="Column5" xsi:type="SQLCHAR"/>
</ROW>
</BCPFORMAT>
我發現,如果我在我的.csv的內容複製到一個全新的文件並保存然後重新運行該查詢將成功完成。但是,這是不理想的那麼扭捏格式文件並運行相同的查詢後,現在我得到這樣的結果:
Column 1 Column2 Column3 Column4
ÿþD
m
m
m
m
m
當我的原始數據是這樣的:
Column 1 Column2 Column3 Column4
Abc elephant Yes Job has finished.
def tiger Yes Job has finished.
xyz monkey Yes Job has finished.
ghi dog Yes Job has finished.
看來,現在查詢正在完成但正在返回垃圾數據。
有誰知道如何解決這個問題,以便我可以返回準確的結果?
打開一個導致錯誤的記事本,然後單擊文件,另存爲。在另存爲對話框中,查看底部並查看它是否是Unicode(或ANSI以外的任何其他)。如果是,請將其更改爲ANSI並保存並查看它是否有效。 –
其實,仔細閱讀你的問題我很肯定Unicode編碼是問題,因爲ÿþ是一個字節順序標記。 http://en.wikipedia.org/wiki/Byte_order_mark –
如果文件爲Unicode,則可以運行'cmd/a/c type myfile.csv> myansifile.csv'命令將文件轉換爲ANSI。 –