Получение ошибки при выполнении bcp в окне UNIX - PullRequest
2 голосов
/ 07 февраля 2012

В настоящее время я работаю над выполнением Perl-скрипта в окне Unix.Сценарий Perl внутренне использует команду BCP для извлечения данных из базы данных MS-SQL.Тот же скрипт perl правильно работает в Windows.Но когда я выполняю его в Unix (используя Putty).На консоли отображается следующее сообщение об ошибке.

sh: bcp: command not found

Ниже приведена моя команда sql в сценарии perl.

"bcp \"select drive_id, ilf, xcoord, ycoord 
from $mdtdb\.dbo\.$mdtcentraldtdtable a where 
drive_id = $driveid and not exists 
(select 'x' from $mdtdb\.dbo\.$mdtcentralaudittable b where 
a.drive_id = b.drive_id and a.ilf = b.ilf)\"
 queryout $tempdatafile -o $bcpoutfile -S $mdtsvr -q -c -t , 
 -U $user1 -P $pw1";

Я успешно могу подключиться к БД.

Мне нужна ваша помощь для решения вышеуказанной проблемы с BCP.

Ответы [ 3 ]

2 голосов
/ 08 февраля 2012

В Unix есть инструмент bcp для клиентов Sybase. Работает только для продуктов Sybase.

Существует замена с открытым исходным кодом для bcp, которая работает с MSSQL-сервером: freebcp Но библиотека freetds немного сложна в настройке, и (будучи добровольным усилием по обратному проектированию) она работает только с относительно простые типы данных.

Чтобы установить его на Linux-машинах на основе Ubuntu / Debian, запустите этот

поиск в apt-cache

freetds-common - configuration files for FreeTDS SQL client libraries
freetds-dev - MS SQL and Sybase client library (static libs and headers)
libct4 - libraries for connecting to MS SQL and Sybase SQL servers
libdbd-freetds - Freetds database server driver for libdbi
libsybdb5 - libraries for connecting to MS SQL and Sybase SQL servers
tdsodbc - ODBC driver for connecting to MS SQL and Sybase SQL servers
freetds-bin - FreeTDS command-line utilities
libaprutil1-dbd-freetds - Apache Portable Runtime Utility Library - FreeTDS Driver
sqsh - commandline SQL client for MS SQL and Sybase servers
libqt4-sql-tds - Qt 4 FreeTDS database driver

Эта команда необязательна:

список файлов apt freetds-bin

freetds-bin: /usr/bin/bsqldb
freetds-bin: /usr/bin/bsqlodbc
freetds-bin: /usr/bin/datacopy
freetds-bin: /usr/bin/defncopy
freetds-bin: /usr/bin/fisql
freetds-bin: /usr/bin/freebcp
freetds-bin: /usr/bin/osql
freetds-bin: /usr/bin/tdspool
freetds-bin: /usr/bin/tsql

Эти команды устанавливают большую часть того, что вам нужно

apt-get install freetds-bin 
apt-get install freetds-dev 

Затем вы должны ввести данные вашего соединения в файл конфигурации

/etc/freetds/freetds.conf

[OurMSSQLServer]

    host = 1xx.xxx.xxx.xx
    port = 1433
    tds version = 8.0

Может быть, что-то еще в этом конфигурационном файле нужно изменить. Это я сейчас не помню.

С этого момента вы сами по себе. Пожалуйста, прочитайте документы freetds: http://www.freetds.org/userguide/

Программное обеспечение freetds является современным (активно развивается). Но я думаю, что команда разработчиков очень мала.

Вы также можете скомпилировать freetds из исходного кода, но это может потребовать больше усилий.

1 голос
/ 07 февраля 2012

Ошибка очень очевидна: команда bcp не найдена в вашем $ PATH, и поэтому она не работает, но реальная проблема заключается в том, что bcp - это утилита сервера MS SQL, и вы не найдете ее в UNIX

0 голосов
/ 07 февраля 2012

Вы можете получить программный доступ к базе данных MSSQL из Perl в Unix, используя DBI ‌ → DBD :: ODBC ‌ → Драйвер Easysoft SQL Server ODBC

...