2017-01-17 11 views
2

私はパイプがフラット・ファイルを区切りインポートしようとしているが、エラーの下に取得しています:BULKのINSERT:FieldTerminator、キャリッジリターンと改行文字を持つフラットファイルとしてROWTERMINATOR

メッセージ4832、レベル16、状態1、行1 バルクロード:予期しないファイルの終わりがデータファイルで検出されました。 メッセージ7399、レベル16、状態1、行1 リンクサーバー "(null)"のOLE DBプロバイダー "BULK"がエラーを報告しました。プロバイダは、エラーに関する情報を一切提供しませんでした。 メッセージ7330、レベル16、状態2、行1 リンクサーバー "(null)"のOLE DBプロバイダー "BULK"から行をフェッチできません。

マイコード:

IF OBJECT_ID('tempdb..##tblImport') IS NOT NULL DROP TABLE tempdb..##tblImport; 

CREATE Table ##tblImport (VoucherNumber BIGINT,Currency VARCHAR(100),VoucherAmount MONEY, RetailAmount MONEY, VoucherDuration INT, ServiceProviderGroupID INT, BatchNumber BIGINT, SerialNumber int) 

    DECLARE @SQL VARCHAR(2000) 
    DECLARE @FilePath VARCHAR(1000) 

    SET @FilePath = 'C:\Users\Documents\Sample.txt' 
    SET @SQL = 'bulk insert ##tblImport from ''C:\Users\Documents\Sample.txt'' 
    WITH 
    (
     FIELDTERMINATOR = ''|'', 
     ROWTERMINATOR = ''|\n'' 
    )' 

    EXEC(@SQL) 

SELECT * FROM ##tblImport 

私は、行の末尾にパイプを削除し、単に「\ n」が、私は同じエラーを取得するには、コードの行区切り文字を変えてみてください。 シリアル番号列をVARCHAR(MAX)に変更しようとしましたが、最後の列にすべてのレコードが入力されています。 \ n再び上記のエラーを出す前にスペースを与えてください。誰かがデータをインポートするためのコードを教えてくれますか?

+0

FIELDTERMINATOR = '' | ''、ROWTERMINATOR = '' | \ n " デリミタの前にスペースを入れた場合、以下のエラーが表示されます。 ** 1行8(SerialNumber)の一括読み込みデータ変換エラー(指定したコードページの型が一致しないか無効な文字)** –

+0

FYI:@FilePath変数は宣言されていますが使用されていません。 –

+0

はい。私はそれを変えます。ありがとうございました。 @SQL_Underworld –

答えて

0

SQL Serverでは、キャリッジリターン\ rはデフォルトで改行文字\ n([CR] [LF])と解釈されています。しかし、それは正しくありません。私のファイルは、各行の終わりに改行文字と共にキャリッジリターンを持っています。だから私は、それは完全に仕事をした

ROWTERMINATOR = ''|\r\n'' 

以下のように行区切り文字を変更しているし、私の問題は解決しました。

0

'|'フィールド/列を区切り、 '| \ n'はレコード/行を区切ります。これは、すべてのレコードが '| \ n'で終わって、次のレコードの先頭を示すことを意味します。

+0

はい。しかし、それは起こっていない。ファイルに何か問題があり、各行の終わりにパイプ区切り記号を削除しても何も表示されないため、見つけられませんでした。 –

+0

ファイルに何か問題があります。コードではありませんか? –

+0

はい。しかし、私はその問題を克服するためにコードを改善する必要があります。 –

関連する問題