1. ホーム
  2. sql

[解決済み] 1行目4列目(年)の一括読み込みデータ変換エラー(型の不一致または指定したコードページに対して無効な文字)。

2022-03-04 15:13:04

質問

テキストファイルをデータベースにインポートしようとすると、変換エラーが発生します。以下は、私が受け取ったエラーメッセージです。

1行目4列目(年)の一括読み込みデータ変換エラー(型の不一致または指定されたコードページに対して無効な文字)です。

以下は私のクエリコードです。

CREATE TABLE Students
(
    StudentNo    Integer NOT NULL Primary Key,
    FirstName    VARCHAR(40) NOT NULL,
    LastName     VARCHAR(40) NOT NULL,
    Year         Integer,
    GPA          Float NULL
);

以下は、テキストファイルのサンプルデータです。

100,Christoph,Van Gerwen,2011
101,Anar,Cooke,2011
102,Douglis,Rudinow,2008

何が問題なのか分かった気がします。以下は私の一括挿入コードです。

use xta9354
bulk insert xta9354.dbo.Students
from 'd:\userdata\xta9_Students.txt' 
with (fieldterminator = ',',rowterminator = '\n') 

サンプルデータでは、Year の後に別の属性 Grade が存在し、それが NULL であっても、Year 属性の後に ',' はありません。

どなたか、これを修正する方法を教えてください。

解決方法は?

を使用してみてください。 フォーマットファイル データファイルが4列しかないため。それ以外の場合は OPENROWSET またはステージングテーブルを使用します。

myTestFormatFiles.Fmt のように見えるかもしれません。

9.0
4
1 SQLINT 0 3 "," 1 StudentNo ""
2 SQLCHAR 0 100 "," 2 FirstName SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 100 "," 3 LastName SQL_Latin1_General_CP1_CI_AS
4 SQLINT 0 4 "\n" 4 Year "


<サブ (出典 マイクロソフト・ドット・コム )

このチュートリアル でのカラムのスキップについて BULK INSERT も参考になるかもしれません。

そうすると、文は次のようになります。

USE xta9354
GO
BULK INSERT xta9354.dbo.Students
    FROM 'd:\userdata\xta9_Students.txt' 
    WITH (FORMATFILE = 'C:\myTestFormatFiles.Fmt')