Sql server &引用;“BCP复制失败”;在tsv上(没有进一步的错误信息)
正在尝试在linux CentOS7上使用BCP实用程序将tsv文件复制到远程MSSQL Server DB(在Windows Server 2012计算机中)中,收到以下简短错误消息: 正在开始复制 BCP复制失败 有关的BCP命令是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
/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