Sql server 从Bash或Perl脚本运行SQL语句?
我想写一个脚本,Perl或Bash,在这里我可以运行一个或多个SelectSQL语句,从远程服务器上的数据库中获取一些信息 目前,我可以使用诸如RazorSQL和DbVisualizer之类的GUI工具连接到数据库和查看表,运行SQL命令,等等。。。但是,我想尝试从脚本中运行一些SQL命令,以便在Bash/Perl脚本中使用cmds的结果 运行数据库的服务器具有以下详细信息: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
- 操作系统:Microsoft Windows Server 2003 RS标准版SP2
- 数据库:Microsoft SQL Server 2005
然后,在linux机器上使用DbVisualizer时,我使用JDBC驱动程序“SQL Server(jTDS)”,这两种驱动程序似乎都工作得很好 因此,为了尝试从Perl中执行此操作,我下载了以下软件包:
- unixODBC
- 免费的
- SQSH-->*但是,由于Sybase的原因,我无法编译它
- Perl模块:DBD::ODBC、DBD::JDBC、DBI
并使用此网站:,添加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--> 简而言之,我需要做以下几点:
卸载
/configure--prefix=/usr/local/FreeTDS--with tdsver=7.0
make install
)之后:在配置文件中添加了以下行:
尝试服务器登录=是
尝试域登录=否
tds版本=7.0
这些行使它使用数据库登录凭据,而不是Windows域登录信息。tds版本7告诉freetds连接到DB的版本,并指出版本7适用于比MS SQL Server 2000更新的SQL Server版本
[mydb]
host=jwp-eim02.paoli.jwpepper.local
端口=1433
tds版本=8.0
/usr/local/freetds/bin/tsql-S mydb-U sqlUsername
运行该命令后,系统会提示我输入密码,然后会显示一个命令提示符,看起来像“1>”,它会告诉您它已成功登录希望这能帮助其他人做同样的事情。。。我想如果我想用Bash这样的东西来实现这一点,我可能会使用FreeTDS附带的命令之一,比如tsql、osql等等。。。但是,我对此并不乐观。谢谢你的回复,辛巴基,我真的很感谢你的帮助。。!那完全不起作用。我在DBI连接线上遇到一个错误,它说:“未找到[unixODBC][Driver Manager]数据源名称,并且没有默认值