2013-02-06 22 views
0

我有一個使用批量插入命令導入的製表符分隔文件。 我有一個格式文件如下。批量插入空列UCS-2 Little Endian

8.0 
9 
1  SQLCHAR  0  50  "\t"       1  Field1    "SQL_Latin1_General_CP1_CI_AS" 
2  SQLCHAR  0  50  "\t"       2  Field2    "SQL_Latin1_General_CP1_CI_AS" 
3  SQLCHAR  0  50  "\t"       3  Field3    "SQL_Latin1_General_CP1_CI_AS" 
4  SQLCHAR  0  50  "\t"       4  Field4    "SQL_Latin1_General_CP1_CI_AS" 
5  SQLCHAR  0  50  "\t"       5  Field5    "SQL_Latin1_General_CP1_CI_AS" 
6  SQLCHAR  0  50  "\t"       6  Field6    "SQL_Latin1_General_CP1_CI_AS" 
7  SQLCHAR  0  50  "\t"       7  Field7    "SQL_Latin1_General_CP1_CI_AS" 
8  SQLCHAR  0  50  "\t"       8  Field8    "SQL_Latin1_General_CP1_CI_AS" 
9  SQLCHAR  0  0  "\r\n"      9  Field9    "SQL_Latin1_General_CP1_CI_AS" 

對ANSI文件工作正常,但我收到的文件爲UCS-2 Little Endian編碼。

我試圖得到它的工作是對格式文件使用以下修改。哪些停止任何錯誤,但我得到正確的行數與所有空列。如果可能,我想避免轉換文件。

8.0 
9 
1  SQLCHAR  0  50  "\t\0"       1  Field1    "SQL_Latin1_General_CP1_CI_AS" 
2  SQLCHAR  0  50  "\t\0"       2  Field2    "SQL_Latin1_General_CP1_CI_AS" 
3  SQLCHAR  0  50  "\t\0"       3  Field3    "SQL_Latin1_General_CP1_CI_AS" 
4  SQLCHAR  0  50  "\t\0"       4  Field4    "SQL_Latin1_General_CP1_CI_AS" 
5  SQLCHAR  0  50  "\t\0"       5  Field5    "SQL_Latin1_General_CP1_CI_AS" 
6  SQLCHAR  0  50  "\t\0"       6  Field6    "SQL_Latin1_General_CP1_CI_AS" 
7  SQLCHAR  0  50  "\t\0"       7  Field7    "SQL_Latin1_General_CP1_CI_AS" 
8  SQLCHAR  0  50  "\t\0"       8  Field8    "SQL_Latin1_General_CP1_CI_AS" 
9  SQLCHAR  0  0  "\r\0\n\0"      9  Field9    "SQL_Latin1_General_CP1_CI_AS" 

回答

2

你幾乎沒有,只是改變SQLCHAR到SQLNCHAR

0

你的BULK INSERT聲明是什麼樣的?您可能需要添加DATAFILETYPE

BULK INSERT {TableName} 
FROM '{FilePath}' 
WITH (DATAFILETYPE = 'widechar', FORMATFILE = '{FormatFilePath}') 
1

你的問題讓我得到我的回答不同的類似的問題由於

「\ t \ 0「是黃金! (愚蠢的UNICODE :()

(我已經有了SQLNCHAR SQLNVARCHAR PART :))