2009-04-16 517 views
1

私は一括挿入によって、SQL Server 2008に一部のデータをインポートしようとしていますが、私は変換エラーのトンを取得してきた:SQL一括挿入エラー4863

メッセージ4864、レベル16、状態1、行1 行5902、列2(タイプ)のバルク・ロード・データ変換エラー(指定されたコード・ページの型不一致または無効な文字)。最初

OKので、最初のもの:

a)のデータは、私はC#で構築されたパーサから来ています。このファイルには、タブで区切られた4つの列があります。列はnullでもかまいません。照合順序はUTF-8です。 ここにその抜粋があります。

D00486 DBLinks PubChem 7847552 
D00486 DBLinks LigandBox D00486 
**D00487 Name  Pyridostigmine bromide (JP15/USP/INN)** -- WORKS 
D00487 Name  Mestinon (TN) 
D00487 Chemical 260.016 C9H13N2O2. Br 
D00487 Target PATH:hsa00564(43) 
D00487 Remark  Therapeutic category: 1239 
D00487 Remark  ATC code: N07AA02 
D00487 Pathway PATH: map07220 Cholinergic and anticholinergic drugs 
D00487 DBLinks CAS 101-26-8 
D00487 DBLinks PubChem 7847553 
D00487 DBLinks DrugBank DB00545 
D00487 DBLinks LigandBox D00487 
**D00488 Name  Pyrimethamine (JAN/USP/INN)** -- DOES **NOT** WORK! 
D00488 Name  Daraprim (TN) 

2番目の行から最後の行までは、以前に表示したようなエラーメッセージが表示されます。 本当に私を驚かせるのは、私が太字に置いた他の行は非常に似ていますが、エラーはまったく発生しません。

B)これは私がテーブルを作成するために使用しているものです:

CREATE TABLE [dbo].[KB] ([BEName] [nvarchar](1000) NOT NULL, [Type] [nvarchar](1000) NULL, [Name] [nvarchar](1000) NULL, [Value] [nvarchar](1000) NULL) ON [PRIMARY] 

C)これは私が現在のファイルからデータをインポートするために使用しているものです:

DECLARE @SQL nvarchar(4000) 
SET @SQL = 'BULK INSERT KB FROM ''C:\KB.xml'' WITH (FirstRow = 1, FORMATFILE = ''C:\out_KB.fmt'')'; 
EXEC(@SQL) 

私は手動でfmtファイルを生成しなければなりませんでした。なぜなら、何らかの理由でBCPがデータベースに接続できなかったからです(まだそれについての基礎を作っています...)。そうでなければならない可能性があります。いずれにせよ、ここではそれは中身だ、次のとおりです。私は以前に述べてきたように、私はBCPと多くの経験を持っていない

9.0 
4 
1 SQLCHAR 0 100 "" 1 BEName SQL_Latin1_General_CP1_CI_AS 
2 SQLCHAR 0 500 "\t" 2 Type SQL_Latin1_General_CP1_CI_AS 
3 SQLCHAR 0 500 "\t" 3 Name SQL_Latin1_General_CP1_CI_AS 
4 SQLCHAR 0 500 "\n" 9 Value SQL_Latin1_General_CP1_CI_AS 

。当初、私は単に

BULK INSERT KB FROM ''C:\KB.xml'' WITH (FirstRow = 1, RowTerminator = ''\n'' , FieldTerminator = ''\t'') 

を使用していましたが、とにかく動作しませんでした。私はまだFMTファイルの代わりにこれを使っています。私はグーグルで試してみましたが、\ n \ crで\ nをスワップしたり、代わりに\ nのASCIIコードを導入したりするなど、いくつかのトリックを試みました。

アイデア?私は、私は今、疲れていると言うことはできません正午まで何か寝るか:S(それは今ここに午前4時です)。

乾杯メイト、おかげで、事前 ハル

PS:私は、サンプルはOKだと思いますが、私のゲストも、あなたがいつでも必要があるかもしれないものをリクエストしてください。 PS2:テキストの壁には申し訳ありません)

答えて

1

非XMLの一括挿入ファイルは非常に厄介です。私はあなたのことを見て問題は見られませんが、問題を逃すのは簡単です。

XML一括挿入ファイルの操作が非常に簡単です。代わりにXML一括挿入ファイルを生成するためにコードをリファクタリングすることはできますか?また、XML挿入ファイルを使用する際にもXMLフォーマットファイルを使用する必要があり、BCPはそれを作成しません。XMLフォーマットファイルを自分で作成する必要がありますが、かなり簡単です。

+0

いい考えです。ありがとうございます。 私はいつかそれを実装しなければなりません、今私はタスクのGUIを通してデータをインポートすることができました。 ありがとうもう一度 –

2

古いスレッドですが、記録のために、OPのフォーマットファイルに問題があったと思います。最初の行の区切り文字は指定しません。それは次のようになります。

9.0 
4 
1 SQLCHAR 0 100 **"\t"** 1 BEName SQL_Latin1_General_CP1_CI_AS 
2 SQLCHAR 0 500 "\t" 2 Type SQL_Latin1_General_CP1_CI_AS 
3 SQLCHAR 0 500 "\t" 3 Name SQL_Latin1_General_CP1_CI_AS 
4 SQLCHAR 0 500 "\n" 9 Value SQL_Latin1_General_CP1_CI_AS 

... アスタリスクなし。

Windowsシステムのファイルは、通常、最終ターミネータには "\ r \ n"が必要です。

+0

入力していただきありがとうございます。 –

関連する問題