将文件中的数据加载到SQL Server表中会导致EOF和正确的截断错误

问题描述 投票:0回答:1

我正在尝试将文件中的数据加载到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] [用于SQL Server的ODBC驱动程序13]字符串数据,右截断

SQLState = 22001,NativeError = 0错误= [Microsoft] [用于SQL Server的ODBC驱动程序13]字符串数据,右截断

SQLState = 22001,NativeError = 0错误= [Microsoft] [用于SQL Server的ODBC驱动程序13]字符串数据,右截断

SQLState = 22001,NativeError = 0错误= [Microsoft] [用于SQL Server的ODBC驱动程序13]字符串数据,右截断

SQLState = S1000,NativeError = 0错误= [Microsoft] [SQL Server ODBC驱动程序13] 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)或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')。

sql sql-server bcp
1个回答
0
投票
(\ 034)或0x1C是双引号的ASCII代码。这与SQL数据配合得不好。在导入到SQL Server之前,您可能需要用其他一些ASCII代码替换定界符。尝试使用波浪号(126)。
© www.soinside.com 2019 - 2024. All rights reserved.