BCP выбрасывает «Недопустимое значение символа для приведения» для правильного формата даты? - PullRequest
1 голос
/ 08 октября 2019

Использование bcp из пакета mssql-tools (в CentOS 7). Попытка скопировать файл TSV в таблицу SQL Server 2012 и получить ошибку:

@ Строка 1, столбец 4: недопустимое значение символа для спецификации приведения @ #

Открывая tsv в vi и используя :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 документы

дд мон [,] [гг] гг *

(хотя обратите внимание на этодля 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

Кто-нибудь знает, что здесь может происходить? Любые дальнейшие предложения отладки?

...