2

Bulk Insertステートメントを使用してMAXERRORSを無効にする方法はありますか?

一括挿入するファイルではエラーの数が多くなる可能性があるため、エラーの数を無限に増やしたいと思います(このファイルを制御できず、現在ベンダーと協力して問題を修正しています特定の行)。

それを無効にする方法がない場合、MAXERRORSが処理できる最大数はいくつですか?それは2147483647ですか?

4

1 に答える 1

2

通常、外部ソースからデータをインポートする場合、データの問題に非常に注意します。SQLServerはいくつかのソリューションを提供します。多くの人がSSISを使用しています。私はSSISを避けます。その理由の1つは、ユーザーが既に開いているExcelファイルを開くようにすることです。他にもいくつかの欠点があります。

いずれにせよ、データがテキストファイルに入れられたら、データ型が元のテーブルのすべての列を持つステージングテーブルを作成しますvarchar(8000)。これは必要以上に大きくなる傾向がありますが、十分なはずです。

次に、適切な列を含むテーブルを作成し、次のようなものを使用してデータを入力します。

insert into RealTable (CharColumn, IntColumn, FloatColumn, DateTimeColumn)
    select CharColumn,
           (case when isnumeric(IntColumn) = 1 and IntColumn not like '%.%' then cast(IntColumn as int end),
           (case when isnumeric(FloatColumn) = 1 then cast(FloatColumn as float) end),
           (case when isdate(DateColumn) = 1 then cast(DzteColumn as date)
    from StagingTable st

つまり、caseエラーを回避するためにステートメントを使用して、SQLコードで型チェックを実行します。タイプが一致しない場合、結果はNULL値になります。次に、StagingTableを使用してデータベースの値を調査し、問題を理解できます。

また、RealTableには、常に次の列があります。

  • RealTableId int Identity(1,1)
  • CreatedBy varchar(255)デフォルトのsystem_user、
  • CreatedAt datetime default getdate()

これらは、しばしば役立つデータに関する追跡情報を提供します。

于 2013-01-16T14:51:15.857 に答える