2017-09-27 141 views
1

私は¬フィールド区切り文字と[CR][LF]行ターミネータを持つUTF-8ファイルを持っています。SQLバルク挿入UTF-8

DECLARE @bulk_cmd varchar(1000) 

SET @bulk_cmd = 'BULK INSERT [test].pcb_Load 
FROM ''T:\pcb_Workspace_2\Outputs\pcb\Load\pcb_MS_TEST_2.txt'' 
WITH (FIELDTERMINATOR = ''¬'', ROWTERMINATOR = '''+CHAR(10)+''',FIRSTROW=2)' 

EXEC (@bulk_cmd) 

SELECT * FROM test.pcb_load 

:私は以下のように表内のtxtタイルをロードするために一括挿入を使用しています12.0.5556.0(X64)

- SQLのバージョンは、Microsoft SQL Server 2014(SP2-CU7)(KB4032541)であります私はコードページ65001、行ターミネーター\ r、\ n、\ r \ n、0x0aを使用しようとしましたが、何も動作せず、次のエラーが発生します。

メッセージ4866、レベル16、状態8、行1
一括読み込みに失敗しました。行1、列1のデータファイルで列が長すぎます。フィールドターミネータと行ターミネータが正しく指定されていることを確認してください。メッセージ7301

、レベル16、状態2、行1
は、OLE DBプロバイダリンクサーバー "BULK" "(ヌル)" から必要なインターフェース( "IID_IColumnsInfo")を取得できません。

コードページを削除してCHAR(10)を使用すると(つまりスクリプトより)、ファイルは読み込まれますが、すべての文字列の末尾にハイフンが残ります。

出力データは、しかし、ハイフンはファイルに正しいではありません。この

Col1 Col2 Col3  Col4 
-  0-  pcb1412- DD- 
-  0-  pcb2134- GFD- 
-  0-  pcb324-  DDX- 
-  0-  pcb1234- DDR- 

のように見えます。私が間違っている場所に助言してもらえますか?それはあなたの本当の問題の原因ではないですが

おかげ

答えて

0
は、単に明示的であるためにあなたの ROWTERMINATOR LFやCR用の六角値 '0x0a'に変更し

。あなたのファイルをUTF-16に変換する必要があると思います。以前のバージョンのSQL ServerはUTF-8をサポートしていなかったことを知っていますが、2012年もどちらかとは思えませんが間違っている可能性があります。

+1

私は16進値で試していましたが運はありませんでした。あなたは正しいですが、それはファイルUTF-16を変換することになると思われます。 – BIQuad

関連する問題