文字列変換の問題でSqlBulkCopyが失敗する

.net sql sqlbulkcopy

質問

私は同じ名前の列を持つ別のテーブルに一括ロードするいくつかの列を生成するビューを持っています。

このプロシージャは、SqlDataReaderをループして、SqlCommandを使用してSqlParametersを挿入するたびに正常に機能しました。明らかに、多くの100000の行について、これは遅すぎました。

私はSqlBulkCopyを使用するように切り替えました。これは、ビューの列名とターゲットのdbテーブルの列名と型が一致しているためです(上の手順が有効なので!)。

ただし、最初のレコードでは、 "指定されたString型の値を指定されたターゲット列のsmalldatetime型に変換できません"というInvalidOperationExceptionが発生して失敗します。この最初の行には1つの日付列があり、その値はNULLです。

ビューは列のサブセットを返すだけですが、それ以外の列はすべてnullableです。

どんな助けもありがとう。

受け入れられた回答

sqlbulkcopyは、同じ名前の列間を自動的にはマッピングしません。これは、選択が、宛先表で表示されているのと同じ順序で列を戻すことを前提としています。

したがって、宛先テーブルに7つの列があり、ビューが5を返す場合は、それらを5つの宛先テーブルの最初の5つの列に入れます。

SqlBulkCopyクラスは、列マッピングのコレクションをとることができます。それはトリックを行う必要があります


人気のある回答

SET DATEFORMATを正しい形式(ymd、dmy、mdy、...)に設定して再試行してください。このエラーは、ロケールに依存しない形式ではなく、ローカライズされた形式の日付がある場合に発生します。

これを1つのインサートで行うのは、バルク挿入操作ではなく、長時間実行されるトランザクションと考えられるため、これはお勧めしません。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow