Sql server &引用;“BCP复制失败”;在tsv上(没有进一步的错误信息)

Sql server &引用;“BCP复制失败”;在tsv上(没有进一步的错误信息),sql-server,bcp,Sql Server,Bcp,正在尝试在linux CentOS7上使用BCP实用程序将tsv文件复制到远程MSSQL Server DB(在Windows Server 2012计算机中)中,收到以下简短错误消息: 正在开始复制 BCP复制失败 有关的BCP命令是 /opt/mssql-tools/bin/bcp "$TABLE" in $DATAFILES/part-m-00000 \ -S -D $SERVER_DSN \ -U $USER \ -P $PASSWORD

正在尝试在linux CentOS7上使用BCP实用程序将tsv文件复制到远程MSSQL Server DB(在Windows Server 2012计算机中)中,收到以下简短错误消息:

正在开始复制

BCP复制失败

有关的BCP命令是

/opt/mssql-tools/bin/bcp "$TABLE" in $DATAFILES/part-m-00000 \
        -S -D $SERVER_DSN \
        -U $USER \
        -P $PASSWORD \
        -d $DB \
        -c \
        -t "\t" \
        -e /home/me/projects/bcp-experiments/examples/recent-err-rows.log
版本是

[me@mapr001 examples]$ bcp -v
BCP - Bulk Copy Program for Microsoft SQL Server.
Copyright (C) Microsoft Corporation. All Rights Reserved.
Version: 17.2.0000.1
目标表具有如下所示的模式(这里无法真正想出一种格式化数据的好方法,它是一个非常宽的表)

tsv文件中的模拟示例行如下所示

19133829999997  99  99  2017-01-06 00:00:00.0   2010-07-09 00:00:00.0   2010-07-06 00:00:00.0   299907  19999920    1   null    -1249999    null    32899994    9   50999   null    99  21600999999 32131999999.18  199.98  9   null    null    null    null    9   109999  109999  null    null    null    9   329999  9   76999   99  null    null    null    209999  null    null    null    null    null    99  219999  2199999999  2999    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    9   null    null    null    XXXXXXXX    null    9   999.1   null    null    B2639999    199.1   null    null    null    109999  99  1.99    null    null    2479999 null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    N   null    N   null    N   null    9   null    null    N   24999999    null    2017-01-07 00:00:00.0   null    null    null    null    null    null    null    21ZX9   null    null    null    null    null    null    null    null    null    null    1.99    null    null    null    null    null    null    2499999 null    null    null    null    N   null    null    null    null    N   null    null    null    null    null    null    null    Y   null    null    null    null    null    null    null    null    null    null    null    null    null    3   null    199.99  null    null    null    2018-08-17 15:48:43.0

使用不同的表和数据文件尝试此命令确实有效,此时错误消息过于简短,无法提供更多调试信息(以前从未使用过BCP实用程序)。如果任何人有使用此工具的经验,任何调试建议或如何解决此问题都将不胜感激。

进一步调试后,发现当使用BCP将tsv文件复制到MSSQL DB中时,tsv中的文本“null”值将作为字符串导入,并且(我假设)这就是导致错误的原因,因为目标表中的一些字段需要数值等(在使用BCP之前,使用的是一个以某种更隐藏的方式处理此问题的进程)。将命令更改为表单

echo“用空字符替换空文字值”
空\u,带有\u TAB=“空\t”
TAB=“\t”
sed-i-e“s/$NULL_与_TAB/$TAB/g”$filename
/“$filename”中的opt/mssqltools/bin/bcp“$TABLE”\
$TO_服务器_ODBCDSN\
-U$用户\
-P$密码\
-d$DB\
$recommed\u导入\u模式\
-t“\t”\
-e/home/me/projects/bcp-experiments/examples/recent-err-row.log

修复了该问题(将TSV中的“null”替换为文本制表符)。如果有人知道如何在将来强制BCP发送更详细的错误消息,或者有什么其他类型的问题会引发此类模糊错误,请告诉我。

首先,向我们展示数据文件的一些示例行和表的DDL。@TabAlleman添加了
sp_help
的输出,并为试图导入sql表的数据添加了一个示例行。
19133829999997  99  99  2017-01-06 00:00:00.0   2010-07-09 00:00:00.0   2010-07-06 00:00:00.0   299907  19999920    1   null    -1249999    null    32899994    9   50999   null    99  21600999999 32131999999.18  199.98  9   null    null    null    null    9   109999  109999  null    null    null    9   329999  9   76999   99  null    null    null    209999  null    null    null    null    null    99  219999  2199999999  2999    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    9   null    null    null    XXXXXXXX    null    9   999.1   null    null    B2639999    199.1   null    null    null    109999  99  1.99    null    null    2479999 null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    null    N   null    N   null    N   null    9   null    null    N   24999999    null    2017-01-07 00:00:00.0   null    null    null    null    null    null    null    21ZX9   null    null    null    null    null    null    null    null    null    null    1.99    null    null    null    null    null    null    2499999 null    null    null    null    N   null    null    null    null    N   null    null    null    null    null    null    null    Y   null    null    null    null    null    null    null    null    null    null    null    null    null    3   null    199.99  null    null    null    2018-08-17 15:48:43.0