Использование 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
Кто-нибудь знает, что здесь может происходить? Любые дальнейшие предложения отладки?