我使用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;作为分隔符,第三行是实际信息,每列之间有任意数量的空格。这种输出格式使我很难在我的脚本中使用。
答案 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}}