将数据从文件加载到SQL Server表中会出现EOF和右截断错误



我正在尝试将文件中的数据加载到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=2201,NativeError=0
Error=[Microsoft][ODBC Driver 13for SQL Server]字符串数据,右截断

SQLState=2201,NativeError=0
Error=[Microsoft][ODBC Driver 13for SQL Server]字符串数据,右截断

SQLState=2201,NativeError=0
Error=[Microsoft][ODBC Driver 13for SQL Server]字符串数据,右截断

SQLState=2201,NativeError=0
Error=[Microsoft][ODBC Driver 13for SQL Server]字符串数据,右截断

SQLState=S1000,NativeError=0
错误=[Microsoft][ODBC Driver 13 for SQL Server]在BCP数据文件中遇到意外EOF

这是输入文件中的数据

   ICE_DATASRCNG_TRANS_ONPREM_INBOUND_LOADING#GCW#hp#SHIPMENT#AMS#TRANSACTION#DAILY#E:ICE_DataDataProvidersGCWHPINDIRECTSHIPMENT#/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_DataEDW#/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_DataEDW#/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_DataGRS_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_DataGRS_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_DataGRS_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_DataZyme#/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_DataZyme#/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_DataZyme#/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(或0x1C。为了可读性,我在上面的数据中用#替换了字段分隔符。

表中已经有一些行了。

所以我做了一个小检查,是否可以将表中现有的数据导入到本地文件,截断表中的数据,然后从本地文件重新加载数据。这是一次成功。

加载到本地文件

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'(。

(\034(或0x1C是双引号的ASCII代码。这与SQL数据不太匹配。在导入到SQL Server之前,您可能需要将分隔符替换为其他一些ASCII代码。请尝试使用波浪号(126(。

最新更新