1

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/2010201012312010-12-31 00:00:00
  • DATAFILETYPE一括挿入ステートメントオプションの追加/削除/変更TABLOCK、、CHECK_CONSTRAINTS
  • フォーマットファイルの区切り文字とフィールドサイズを変更します(ただし、MSDNによると、フィールドサイズは重要ではありません)。
  • 実行中SET DATEFORMAT ymd
  • インポートされたファイルを16進エディターでチェックして、ユニコードではなく8ビット文字が実際に含まれていることを確認します。ASCII形式で表示されているものが正確に含まれています。

何か案は?

4

3 に答える 3

0

パーティーに遅れて申し訳ありませんが、これが他の貧しい魂を助けることができることを願っています.

とにかく、フォーマットファイルを使用しているときに同じエラーを発見しました。

タイプSQLDATEの代わりに、 SQLCHARと長さを使用しました。

2015-01-01 = 長さ 10

11.0

1

1 SQLCHAR 0 10 "\r\n" 1 my_date ""

于 2015-03-16T13:17:30.443 に答える
0

なぜこれにフォーマットファイルが必要なのですか? 使わないとどうなる?

BULK INSERT dbo.BulkTest
FROM 'Q:\...\BulkTest.tab'
WITH (
    CHECK_CONSTRAINTS,
    TABLOCK,
    FIRSTROW=1,
    DATAFILETYPE='char',
    ROWTERMINATOR='\r\n'
);
于 2012-06-04T21:05:58.537 に答える
0

これは私のコードで機能する形式です:

08/17/2000 16:32:32

プロデューサーはたまたま.NET ToString(DateTimeFormatInfo.InvariantInfo)、.

于 2012-06-04T20:06:56.943 に答える