0

次のテーブルがあります:

CREATE TABLE [dbo].[tempTable](
    [id] [varchar](50) NULL,
    [amount] [varchar](50) NULL,
    [bdate] [varchar](50) NULL
)

そして次の挿入ステートメント:

BULK INSERT dbo.tempTable
   FROM 'C:\files\inv123.txt'
   WITH 
      (
         FIELDTERMINATOR ='\t',
         ROWTERMINATOR ='\n'
      )

次のエラーが表示されます:

行 1、列 3 (bdate) の一括読み込みデータ変換エラー (切り捨て)。

ファイル内のデータ例:

12313 24 2012-06-08 13:25:49
12314 26 2012-06-08 12:25:49
4

1 に答える 1

0

行を区切っていないように見えます。列区切り記号と行区切り記号で行を区切る必要がありました。これは、テキスト ファイルの最後の値の後に、後付けの (および不要な) 列区切り記号があり、それを見つけるのに時間がかかったためです。これらの日付は確かにフォーマットに適合します (巨大なファイルに視覚的に見つけられない悪いデータがないと仮定し、デフォルトでは 10 個のエラーが発生するまで失敗しないため、少なくとも多くの悪いレコードがあるでしょう) )そして、その時点まで正しく進んでいるように見えます。適切なテキスト エディターでファイルを 16 進数で表示し、確認するか試してみてください。

BULK INSERT dbo.tempTable
FROM 'C:\files\inv123.txt'
WITH 
  (
     FIELDTERMINATOR ='\t',
     ROWTERMINATOR = '\t\n' 
  )

もう 1 つの可能性 (私はvarchar(50)それvarchar(50)が . この場合、追加できます

FIRSTROW = 2, 

これらのことを行ってもまだ失敗する場合は、データを強制的に挿入するか、エラーが発生している行を取得して、問題がどこにあるかを正確に把握してください。フレーバーの SQL SERVER に応じて調査または使用するか、テキストをデータ型として使用して一時テーブルを作成しますset ansi_warnings offERRORFILESQL Server 2005 ではより厳密なデータ検証が強制され、確実に挿入を強制することはより困難ですが、実行できます。

于 2012-06-19T13:30:27.840 に答える