2012-02-07 55 views
2

當前我正在Unix框中執行Perl腳本。 Perl腳本內部使用BCP命令從MS-SQL DB中獲取數據。在Windows中正確運行相同的perl腳本。但是當我將它執行到Unix(使用Putty)時。它在控制檯上顯示以下錯誤消息。在UNIX中執行bcp時出錯提示框

sh: bcp: command not found 

以下是我在perl腳本中的sql命令。

"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問題。

+1

'bcp'是一個MS SQLServer實用程序。我不相信它存在於Windows以外的其他任何東西上。 – Mat 2012-02-07 13:27:41

回答

1

的錯誤是很清楚的:bcp命令未在$ PATH找到,因此它失敗了,但真正的問題是,BCP是MS SQL Server實用,你不會發現它在UNIX

+0

您是否知道UNIX中bcp的任何替代方法?如果它是freebcp,請讓我知道配置步驟。 – 2012-02-08 10:15:31

0

您可能能夠通過使用DBIDBD::ODBCEasysoft SQL Server ODBC Driver

+0

但我認爲Easysoft驅動不是免費的。我們必須先購買它。但是,在我目前的應用程序中,我只能通過使用freetds來實現它。 – 2012-02-08 10:14:48

+0

您開始使用MSSQL,這是付費軟件。如果你有錢購買MSSQL,那麼你怎麼沒有錢購買連接器?如果您不想爲軟件付費,那麼可以使用高質量的免費數據庫:PostgreSQL。 – zgpmax 2012-02-08 13:12:02

+0

您可以使用perl或python中的sybase dbd驅動程序獲取數據庫訪問權限。 – IanNorton 2012-02-10 07:31:19

2

在unix系統中去,從Perl的UNIX上MSSQL數據庫的編程訪問,有是Sybase客戶端BCP工具。它僅適用於Sybase產品。

有一個開源替代BCP與MSSQL服務器的工作原理:freebcp但freetds的圖書館是有點難以配置,以及(是由志願者逆向工程努力)它僅適用於相對簡單的數據類型。

要上安裝Ubuntu的/ Debian的基於Linux的機器,運行此

容易緩存搜索freetds的

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 

則必須輸入連接數據到CONFIGFILE

/etc/freetds/freetds.conf 

[OurMSSQLServer] 

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

或許真的在這CONFIGFILE其他必須改變。這我現在不記得了。

從這裏開始你自己。請閱讀freetds文檔:http://www.freetds.org/userguide/

freetds軟件是最新的(積極開發)。但我認爲開發團隊非常小。

你也可以從源代碼編譯freetds,但這可能需要更多的努力。

+0

如果可能,請讓我知道在Unix機器上配置freebcp的步驟。或者給我任何參考網址。 – 2012-02-08 10:13:33

+0

請參閱我的編輯。 – knb 2012-02-08 12:06:06