Я пытаюсь загрузить данные из файла в таблицу SQL Server. Я использую следующую команду bcp
:
bcp [dbo].[DSUpstreamFileDetails] in "c:\BackLogTable.dat"
-c -t0x1C -S abc.database.secure.windows.net -d abc-U asd-P sda
Но я получаю следующую ошибку
SQLState = 22001, NativeError = 0
Ошибка = [Microsoft] [ODB C Драйвер 13 для SQL Сервер] Строковые данные, усечение справа
SQLState = 22001, NativeError = 0
Ошибка = [Microsoft] [ODB C Драйвер 13 для SQL Сервер] Строковые данные, правое усечение
SQLState = 22001, NativeError = 0
Ошибка = [Microsoft] [ODB C Драйвер 13 для SQL Сервер] Строковые данные, правое усечение
SQLState = 22001, NativeError = 0
Ошибка = [Microsoft] [ODB C Драйвер 13 для SQL Сервер] Строковые данные, усечение справа
SQLState = S1000, NativeError = 0
Ошибка = [Microsoft] [ODB C Драйвер 13 для SQL Сервер] В файле данных BCP обнаружен непредвиденный EOF
Это данные во входном файле
ICE_DATASRCNG_TRANS_ONPREM_INBOUND_LOADING#GCW#hp#SHIPMENT#AMS#TRANSACTION#DAILY#E:\ICE_Data\DataProviders\GCW\HPINDIRECT\SHIPMENT#/Dataproviders/Landing/GCW/HPIndirect/Shipment/AMS#gcw_hp_indirect_shipment_ams_658_20200303_04_38_08.dat##Backlog#2020-03-06 10:37:36#2020-03-06 10:37:43#1
ICE_DATASRCNG_TRANS_ONPREM_INBOUND_LOADING#EDW#ord#ORDER#ALL#TRANSACTION#DAILY#E:\ICE_Data\EDW#/DataProviders/Landing/KAI/Order#edw_ord_extr_3x_SIQP_20200306.035105.dat##Backlog#2020-03-06 10:37:50#2020-03-06 10:38:01#1
ICE_DATASRCNG_TRANS_ONPREM_INBOUND_LOADING#EDW#ship#SHIPMENT#ALL#TRANSACTION#DAILY#E:\ICE_Data\EDW#/DataProviders/Landing/KAI/Ship#edw_ship_extr_3x_SIQP_20200306.035052.dat##Backlog#2020-03-06 10:38:09#2020-03-06 10:38:18#1
ICE_DATASRCNG_TRANS_ONPREM_INBOUND_LOADING#GRS#REBATES#REBATES#AMS#TRANSACTION#WEEKLY#E:\ICE_Data\GRS_ORION#/DataProviders/Landing/Rebates/AMS#GRS_ICE_AMS_20200302.100847.dat##Backlog#2020-03-06 10:38:24#2020-03-06 10:38:26#1
ICE_DATASRCNG_TRANS_ONPREM_INBOUND_LOADING#GRS#REBATES#REBATES#APJ#TRANSACTION#WEEKLY#E:\ICE_Data\GRS_ORION#/DataProviders/Landing/Rebates/APJ#GRS_ICE_APJ_20200302.100647.dat##Backlog#2020-03-06 10:38:30#2020-03-06 10:38:33#1
ICE_DATASRCNG_TRANS_ONPREM_INBOUND_LOADING#ORION#REBATES#REBATES#AMS#TRANSACTION#WEEKLY#E:\ICE_Data\GRS_ORION#/DataProviders/Landing/Rebates/AMS#Orion_ICE_AMS_20200302.100208.dat##Backlog#2020-03-06 10:38:38#2020-03-06 10:38:46#1
ICE_DATASRCNG_TRANS_ONPREM_INBOUND_LOADING#FCM#REBATES#REBATES#AMS#TRANSACTION#WEEKLY#E:\ICE_Data\Zyme#/DataProviders/Landing/Rebates/AMS#FCM_Columbus_AMS_20200302.213013.dat##Backlog#2020-03-06 10:38:50#2020-03-06 10:39:00#1
ICE_DATASRCNG_TRANS_ONPREM_INBOUND_LOADING#FCM#REBATES#REBATES#APJ#TRANSACTION#WEEKLY#E:\ICE_Data\Zyme#/DataProviders/Landing/Rebates/APJ#FCM_Columbus_APJ_20200302.213013.dat##Backlog#2020-03-06 10:39:05#2020-03-06 10:39:06#1
ICE_DATASRCNG_TRANS_ONPREM_INBOUND_LOADING#FCM#REBATES#REBATES#EMEA#TRANSACTION#WEEKLY#E:\ICE_Data\Zyme#/DataProviders/Landing/Rebates/EMEA#FCM_Columbus_EMEA_20200302.213013.dat##Backlog#2020-03-06 10:39:11#2020-03-06 10:39:18#1
Разделитель полей: (\ 034) или 0x1 C. Для удобства чтения я заменил разделитель полей на # в приведенных выше данных.
В таблице уже есть несколько строк.
Поэтому я сделал небольшую проверку, могу ли я импортировать существующие данные в таблице в локальный файл, обрезать данные в таблице, а затем перезагрузить данные из локального файла. Это был успех.
загрузка в локальный файл
bcp [dbo].[DSUpstreamFileDetails] out "c:\BackLog.dat" -c -t0x1C -S abc.database.secure.windows.net -d abc-U abc -P abc
загрузка данных в таблицу
bcp [dbo].[DSUpstreamFileDetails] in "c:\BackLogTable.dat" -c -t0x1C -S abc.database.secure.windows.net -d abc-U abc-P abc
Как решить проблему правильного усечения пользовательского файла что я использую?
Я использовал переключатели -n
, -N
и -c
, но напрасно.
Терминатором строки является CRLF ('\ r \ n') в входной файл.