BCP是否为有效日期格式抛出“用于转换的无效字符值”?

时间:2019-10-07 23:20:10

标签: sql-server bcp

使用bcp软件包中的mssql-tools(在CentOS 7上)。尝试将TSV文件复制到SQL Server 2012表中并得到错误:

  

@第1行,第4列:强制转换规范@#

的字符值无效

vi中打开tsv,然后使用:set list来显示制表符分隔符,该记录看起来像...

123456^IJOHN DOE^IJOHN DOE^I26 SEP 96^IM^I1234-2134^IY^IUNIT F^I918 ASDF^IZXCVB^I12^I1342^I12345^I^I1^I^I1234^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I123^I^I^I1234^I^IJOHN DOE^I^I^I^I^I^I^I^I^I^IY^I^I^I^I^I0^I0^I^I0^I^I^I^I^I1234^I^I^I^I SOLUTIONS^I^I^I^I^I^I^I^I123^I^I1^I^I^I^I^I^I^I^I^Iasdf1234^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I^I1234^I^I^I^I^I2019-10-07$

所以我们可以看到第4列是日期字符串文字,格式为dd mon yy。对我来说,这应该与SQL Server docs

中的字母格式匹配
  

dd mon [,] [yy] yy

(尽管请注意,这是针对SQL Server 2017的,因为我找不到2012年的文档),并确认目标表中的第4列实际上期望使用date类型。通过查询信息模式

SELECT ORDINAL_POSITION, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH
       , IS_NULLABLE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'MYTABLE'
ORDINAL_POSITION    COLUMN_NAME      DATA_TYPE  CHARACTER_MAXIMUM_LENGTH    IS_NULLABLE
1                   ACCOUNT_ID       bigint     NULL    NO
2                   ACCOUNT_NAME     varchar    160     YES
3                   CONTACT_PERSON   varchar    410     YES
4                   BIRTHDATE        date       NULL    YES
5                   SEX              varchar    50      YES
...

BCP命令如下:

RECOMMEDED_IMPORT_MODE="-c"
/opt/mssql-tools/bin/bcp "$TABLENAME" in $filename \
                -S $DEST_IP \
                -U $USER -P $PASSWORD \
                -d $DEST_DB \
                $RECOMMEDED_IMPORT_MODE \
                -t "\t" \
                -e $EXPORT_STAGE/$TABLENAME/$TABLENAME.bcperror.log

有人知道这里会发生什么吗?还有其他调试建议吗?

0 个答案:

没有答案