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



我正在使用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 读取输出

最新更新