Firebird iSQL - 如何从命令行输入SQL查询,并以更简单的格式检索输出

时间:2014-12-04 08:33:02

标签: sql firebird nsis isql

我使用Firebird的isql.exe工具查询现有数据库:

isql -u <username> -p <password> <database> -i <file.sql> -o <output.txt>

file.sql读取我的SQL语句,并将结果保存到output.txt

但有没有办法通过命令行将SQL语句提供给isql,而不是从文件提供?

这是因为我实际上计划在我的.exe安装程序脚本中执行上述命令(通过NSIS安装程序的ExecWait)。

另外,有没有办法格式化输出,只返回所需的实际信息?目前输出的第一行包含列名,第二行包含一堆&#34; ====&#34;作为分隔符,第三行是实际信息,每列之间有任意数量的空格。这种输出格式使我很难在我的脚本中使用。

2 个答案:

答案 0 :(得分:7)

对于您的第一个问题,您可以使用没有输入文件的Firebird isql:

echo select * from rdb$database; | isql -u sysdba -p password C:\path\to\db.fdb

这会将echo(值select * from rdb$database;)的标准输出重定向到isql的标准输入。查询(或查询)的结果将打印到isql的标准输出(如果使用-o,则打印到文件)。

然而,由于echo是命令提示符的一个特性,我不确定这是否适用于NSIS。否则,您将需要与echo相同的东西:将其参数值打印到标准输出。

正如我之前评论过的,对于你的第二个问题,你应该看看SET HEADING,也许SET WIDTH

答案 1 :(得分:1)

我认为其他人认为这很有用,我实际上能够使用$PLUGINSDIR在NSIS中实现这一点,FileWrite是NSIS在运行时创建的临时文件夹。我在该文件夹中创建了一个临时输入和输出文件。我使用FileRead将SQL语句写入输入文件,并使用{{1}}

读取输出