Ошибка SqlBulkCopy с проблемой преобразования строк

.net sql sqlbulkcopy

Вопрос

У меня есть представление, которое генерирует несколько столбцов, которые я хочу загрузить в другую таблицу, которая имеет одинаково названные столбцы.

Эта процедура работала нормально, когда я перебирал SqlDataReader и делал вставку с SqlParameters с помощью SqlCommand каждый раз. Очевидно, что для многих 100000 строк, это было слишком медленно.

Я переключился на использование SqlBulkCopy, так как казалось, что это сработает, так как имена столбцов представлений и имена и типы столбцов целевых db-таблиц совпадают (поскольку эта процедура работала!).

Тем не менее, в первой записи это не работает с InvalidOperationException, говорящим: «Данное значение типа String не может быть преобразовано в тип smalldatetime указанного целевого столбца». В этой первой строке есть только один столбец даты, и его значение равно NULL.

Представление возвращает только подмножество столбцов, но те, которые у него нет, все являются нулевыми.

Любая помощь будет оценена по достоинству.

Принятый ответ

sqlbulkcopy автоматически не сопоставляет столбцы с тем же именем. Предполагается, что ваш выбор будет возвращать столбцы в том же порядке, в котором он видит их в таблице адресатов.

Поэтому, если в таблице назначения есть 7 столбцов, а представление возвращает 5, оно попытается поместить эти 5 в первые 5 столбцов таблицы назначения.

Класс SqlBulkCopy может принимать коллекцию сопоставлений столбцов. Это должно делать свое дело


Популярные ответы

попробуйте установить SET DATEFORMAT для исправления формата (ymd, dmy, mdy, ...) для вашего соединения и повторной попытки. эта ошибка обычно возникает, если у вас есть даты в локализованном формате, а не в локальном независимом формате.

так как для всего этого в одной вставке это не рекомендуется, потому что это считается длительной транзакцией, а не операцией объемной вставки.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow