Sql server 从Bash或Perl脚本运行SQL语句?

Sql server 从Bash或Perl脚本运行SQL语句?,sql-server,bash,perl,jdbc,odbc,Sql Server,Bash,Perl,Jdbc,Odbc,我想写一个脚本,Perl或Bash,在这里我可以运行一个或多个SelectSQL语句,从远程服务器上的数据库中获取一些信息 目前,我可以使用诸如RazorSQL和DbVisualizer之类的GUI工具连接到数据库和查看表,运行SQL命令,等等。。。但是,我想尝试从脚本中运行一些SQL命令,以便在Bash/Perl脚本中使用cmds的结果 运行数据库的服务器具有以下详细信息: 操作系统:Microsoft Windows Server 2003 RS标准版SP2 数据库:Microsoft S

我想写一个脚本,Perl或Bash,在这里我可以运行一个或多个SelectSQL语句,从远程服务器上的数据库中获取一些信息

目前,我可以使用诸如RazorSQL和DbVisualizer之类的GUI工具连接到数据库和查看表,运行SQL命令,等等。。。但是,我想尝试从脚本中运行一些SQL命令,以便在Bash/Perl脚本中使用cmds的结果

运行数据库的服务器具有以下详细信息:

  • 操作系统:Microsoft Windows Server 2003 RS标准版SP2
  • 数据库:Microsoft SQL Server 2005
在Windows PC上使用RazorSQL连接到数据库时,我的连接使用驱动程序“net.sourceforge.jtds.jdbc.Driver”
然后,在linux机器上使用DbVisualizer时,我使用JDBC驱动程序“SQL Server(jTDS)”,这两种驱动程序似乎都工作得很好

因此,为了尝试从Perl中执行此操作,我下载了以下软件包:

  • unixODBC
  • 免费的
  • SQSH-->*但是,由于Sybase的原因,我无法编译它
  • Perl模块:DBD::ODBC、DBD::JDBC、DBI
为了安装、测试和设置unixODBC,我使用了这个站点:
并使用此网站:,添加DSN

现在我尝试在这里使用以下说明:,从Perl连接到数据库,但在连接数据库时遇到了一些问题

有没有人能告诉我我的连接路径是否正确,或者我的connect()字符串应该是什么样子的。。。?在RazorSQL中,JDBC“URL”如下所示:

jdbc:jtds:sqlserver://192.168.2.200:1433/ActiveDB;appName=RazorSQL;useCursors=true
我不知道如何使用我在Perl脚本中用GUI命令创建的DSN。。。我很难找到用Perl连接到MS SQL Server的真实示例

列出驱动程序的文件如下所示: odbcinst.ini

[MySQL ODBC 3.51.27r695 Driver]
Driver      = /usr/lib/unixODBC/libmyodbc3.so
Setup       = /usr/lib/unixODBC/libmyodbc3S.so
UsageCount  = 1

[JDBC/ODBC bridge driver for java-1_6_0-sun]
Driver      = /usr/lib/jvm/java-1.6.0-sun-1.6.0/jre/lib/i386/libJdbcOdbc.so
Setup       = /usr/lib/jvm/java-1.6.0-sun-1.6.0/jre/lib/i386/libJdbcOdbc.so
UsageCount  = 1

[TDS Driver]
Driver      = /usr/lib/unixODBC/libtdsS.so
Setup       = /usr/lib/unixODBC/libtdsS.so
UsageCount  = 1

[net.sourceforge.jtds.jdbc.Driver]
Driver      = /opt/jtds-1.3.1/jtds-1.3.1.jar
Setup       = /opt/jtds-1.3.1/jtds-1.3.1.jar
UsageCount  = 1
[MyDB]
Driver      = /usr/lib/unixODBC/libtdsS.so
Description = 
SERVER      = serverName.foo.bar.local
PORT        = 1433
USER        = user1
Password    = abc123
Database    = ActiveDB
*这个列表中的最后一个是RazorSQL使用的同一个驱动程序,但由于它是一个jar文件,我想它只能用于Java程序

这是在~/.odbc.ini中

[MySQL ODBC 3.51.27r695 Driver]
Driver      = /usr/lib/unixODBC/libmyodbc3.so
Setup       = /usr/lib/unixODBC/libmyodbc3S.so
UsageCount  = 1

[JDBC/ODBC bridge driver for java-1_6_0-sun]
Driver      = /usr/lib/jvm/java-1.6.0-sun-1.6.0/jre/lib/i386/libJdbcOdbc.so
Setup       = /usr/lib/jvm/java-1.6.0-sun-1.6.0/jre/lib/i386/libJdbcOdbc.so
UsageCount  = 1

[TDS Driver]
Driver      = /usr/lib/unixODBC/libtdsS.so
Setup       = /usr/lib/unixODBC/libtdsS.so
UsageCount  = 1

[net.sourceforge.jtds.jdbc.Driver]
Driver      = /opt/jtds-1.3.1/jtds-1.3.1.jar
Setup       = /opt/jtds-1.3.1/jtds-1.3.1.jar
UsageCount  = 1
[MyDB]
Driver      = /usr/lib/unixODBC/libtdsS.so
Description = 
SERVER      = serverName.foo.bar.local
PORT        = 1433
USER        = user1
Password    = abc123
Database    = ActiveDB
考虑到这一点,我的“connect()”字符串在Perl中应该是什么样子的,这是使用的正确驱动程序吗


我刚开始尝试用脚本来实现这一点,而我的脑袋现在正被信息打转。。。。因此,如果有人能提供任何帮助,我们将不胜感激

浏览了一下DBD::ODBC文档后,我发现了一些示例。执行以下操作(我删除了一些部分,这不是文字引用)

不幸的是,司机的文档中没有真正的解释,所以让我们继续吧。我们知道有一个
驱动程序=
和一个
服务器=
等等。odbc.ini中也有这些文件,因此您应该尝试一下

my $dsn = "DRIVER=/usr/lib/unixODBC/libtdsS.so;SERVER=serverName.foo.bar.local;PORT=1433;DATABASE=ActiveDB;UID=user1;PWD=abc123";
免责声明:我无法测试,也不知道它是否有效。这只是一个我会尝试的有根据的猜测



您还可以尝试使用DBD::JDBC,这听起来相对简单。但是您需要一些依赖项。不过,我相信您已经介绍了其中一些内容。

好的。。。我相信我已经成功了。再次感谢simbadque的建议,我非常感谢您抽出时间来帮助我

在这一切中,我变得如此混乱,我甚至不知道哪条路是向上的。。。所以,我决定忽略我迄今为止所做的一切,重新审视这一点。最后,我找到了一本优秀的指南,有人写了一本,因为它正是我想做的事(*震惊…)

我在PerlMonks.org上的以下链接找到了这些说明(*我知道标题很明显): 使用DBD::Sybase从Linux访问Microsoft SQL Server-->

简而言之,我需要做以下几点:

  • 卸载FreeTDS:我需要在我最初编译/安装FreeTDS的源目录中执行
    卸载

  • 重新编译并重新安装FreeTDS:重新配置FreeTDS,将其用作configure命令-->
    /configure--prefix=/usr/local/FreeTDS--with tdsver=7.0

  • Configure FreeTDS.conf
    make install
    )之后在配置文件中添加了以下行:
    尝试服务器登录=是
    尝试域登录=否
    tds版本=7.0

    这些行使它使用数据库登录凭据,而不是Windows域登录信息。tds版本7告诉freetds连接到DB的版本,并指出版本7适用于比MS SQL Server 2000更新的SQL Server版本

  • 在freetds.conf中创建一个服务器条目:我添加了以下行以添加运行MS SQL Server 2005数据库的服务器。
    [mydb]
    host=jwp-eim02.paoli.jwpepper.local
    端口=1433
    tds版本=8.0

  • 测试“mydb”条目:
    /usr/local/freetds/bin/tsql-S mydb-U sqlUsername
    运行该命令后,系统会提示我输入密码,然后会显示一个命令提示符,看起来像“1>”,它会告诉您它已成功登录

  • 最后,用Perl进行测试:*下面是我用来从SQLServer数据库获取数据的示例代码

  • 然后我执行了Perl脚本和VIOLA。。。!!我从Select语句中得到了数据


    希望这能帮助其他人做同样的事情。。。我想如果我想用Bash这样的东西来实现这一点,我可能会使用FreeTDS附带的命令之一,比如tsql、osql等等。。。但是,我对此并不乐观。

    谢谢你的回复,辛巴基,我真的很感谢你的帮助。。!那完全不起作用。我在DBI连接线上遇到一个错误,它说:“未找到[unixODBC][Driver Manager]数据源名称,并且没有默认值