我正在使用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
)。
另外,有没有办法格式化输出,以便只返回所需的实际信息?目前,输出的第一行包含列名,第二行是一堆"===="作为分隔符,第三行是实际信息,每列之间有任意数量的空格。这种输出格式使我很难在脚本中使用。
对于您的第一个问题,您可以在没有输入文件的情况下使用 Firebird isql,如下所示:
echo select * from rdb$database; | isql -u sysdba -p password C:pathtodb.fdb
这会将标准输出从 echo(值 select * from rdb$database;
)重定向到 isql 的标准输入。查询的结果将打印到 isql 的标准输出(如果使用 -o
,则打印到文件)。
但是,由于回声是命令提示符的一项功能,我不确定这是否适用于 NSIS。否则,您将需要与 echo 执行相同操作的东西:将其参数值打印到标准输出。
正如我之前评论的那样,对于您的第二个问题,您应该查看SET HEADING
,也许SET WIDTH
.
我的情况是其他人觉得这很有用,我实际上能够使用 $PLUGINSDIR
在 NSIS 中实现这一点,这是 NSIS 在运行时创建的临时文件夹。我在该文件夹中创建了一个临时输入和输出文件。我使用 FileWrite
将 SQL 语句写入输入文件,并使用 FileRead
读取输出