StackOverflowでこのトピックに関する投稿をいくつか見つけましたが、問題を解決できるものはないようです。
SQL Server 2008 Expressの一括インポートを設定しようとしていますが、datetime
値のインポートに失敗します。この問題は非常に基本的なもののように思われるので、私は非常に単純なものを見逃しているに違いありません。他の誰かが問題を見つけられることを望んでいます。
問題
このテーブルにインポートしています:
CREATE TABLE [dbo].[BulkTest](
[ReportDate] [datetime] NOT NULL
)
これは私のフォーマットファイル(BulkTest.fmt)です:
10.0
1
1 SQLDATETIME 0 0 "\r\n" 1 ReportDate ""
これはインポートされるデータです(BulkTest.tab):
ReportDate
2010-12-31
2011-01-31
これはインポートステートメントです:
BULK INSERT dbo.BulkTest
FROM 'Q:\...\BulkTest.tab'
WITH (
CHECK_CONSTRAINTS,
TABLOCK,
FORMATFILE='Q:\...\BulkTest.fmt',
FIRSTROW=1,
DATAFILETYPE='char'
);
これらはエラーです:
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 1, column 1 (ReportDate).
Msg 4864, Level 16, State 1, Line 1
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 2, column 1 (ReportDate).
Msg 4832, Level 16, State 1, Line 1
私が試してみました
- 、、、、、およびその他のさまざまな形式を含む
12/31/2010
、日付形式の変更。31/12/2010
20101231
2010-12-31 00:00:00
DATAFILETYPE
一括挿入ステートメントオプションの追加/削除/変更TABLOCK
、、CHECK_CONSTRAINTS
。- フォーマットファイルの区切り文字とフィールドサイズを変更します(ただし、MSDNによると、フィールドサイズは重要ではありません)。
- 実行中
SET DATEFORMAT ymd
。 - インポートされたファイルを16進エディターでチェックして、ユニコードではなく8ビット文字が実際に含まれていることを確認します。ASCII形式で表示されているものが正確に含まれています。
何か案は?