Файл BCP загружен не полностью, когда ошибка числового значения вне диапазона встречается 10 раз
Я пытаюсь импортировать файл с разделителями табуляции в SQL. Одно из полей в БД decimal(15,2)
, Но файл, который я получаю, может иметь некоторые экспоненциальные значения, такие как -2.702159776E17
который явно не подходит для поля у меня в БД.
Проблема в том, что если в этом экспоненциальном файле более 10 записей, BCP не загружается в полные данные. Как только он встречает 10-й экземпляр экспоненциального значения, он пропускает оставшуюся часть файла.
Я использую ниже BCP команду для загрузки данных:
dbname.dbo.tablename in "filelocation" -c -F 2 -b 10000 -h "TABLOCK" -T -S servername
Файл, который я пытаюсь импортировать, содержит 200 000 записей. Но мы ясно видим, что обработано только 18 000 записей, остальные пропущены. Выход из ПП, как показано ниже.
Starting copy...
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
18149 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 265 Average : (68486.79 rows per sec.)
1 ответ
Посмотрите на следующую опцию BCP:
-m max_errors Задает максимальное количество синтаксических ошибок, которые могут возникнуть до отмены операции bcp. Синтаксическая ошибка подразумевает ошибку преобразования данных в целевой тип данных. Итоговое значение max_errors исключает любые ошибки, которые могут быть обнаружены только на сервере, например нарушения ограничений.
Строка, которая не может быть скопирована утилитой bcp, игнорируется и считается одной ошибкой. Если этот параметр не включен, по умолчанию используется значение 10.
Вы можете видеть, что по умолчанию 10 ошибок. Укажите этот параметр и укажите очень большое значение, если хотите пропустить все ошибки.
Если вы хотите импортировать все записи, вы можете импортировать записи в промежуточную таблицу, которая имеет FLOAT
тип данных вместо DECIMAL(15,2)
, Затем скопируйте данные из промежуточной таблицы в таблицу, в которую вы хотите данные, преобразовав значение с плавающей запятой в десятичное значение.