SQLite - 我们能否从批处理文件向.sql文件传递参数?

3
我希望能够从批处理文件向SQL文件(针对SQLite)传递一个参数。在网上没有找到这种方法,这种操作是否可能?如果不行,还有其他替代方法吗?
例如,我想在批处理文件中将%arg1%传递给sqlTest.sql
@echo off
set arg1=%1
echo .quit | sqlite3.exe -init sqlTest.sql %arg1%"

在 sqlTest.sql 文件中:

.open "db/code_status.db"
SELECT FileName, FilePath, Author
FROM CodeStatus
LEFT JOIN CodeFile ON CodeStatus.ChangeId = CodeFile.ChangeId
WHERE WorkItemId = 2197
ORDER BY ModifiedDate ASC;

针对 WHERE WorkItemId = 2197,我希望能替换掉 2197 并使用批处理参数值。

有什么解决办法吗?谢谢!


另一种方法是使用不同的脚本处理器而不是sqlite3.exe。这里有一个(我的)可以从命令行中获取参数,引用环境变量,并导入/包含包含配置数据的文件的处理器:https://pypi.org/project/execsql/ - rd_nielsen
@rd_nielsen 好建议,但是我无法在客户端PC上安装/配置。这就是为什么我使用简单的批处理和SQL脚本。 - Cloe Lee
将您的脚本分散存储为单独的文件,然后使用“copy”和“echo”将这些片段粘贴在一起,在适当的位置插入参数以创建完整的脚本,然后再使用 sqlite3 运行它。 (sed 或 Python 或 Awk 脚本更适合此操作,但假定您无法安装其中任何一个。) - rd_nielsen
1个回答

4
您可以尝试使用 SQLite命令行工具 (第15节)的 param[eter] 命令。
在这个特定的例子中,修改 sqlTest.sql 文件:
  • 删除 .open
  • WHERE WorkItemId = 2197 改为 WHERE WorkItemId = :id
然后您可以使用类似以下的批处理脚本来得到所需的结果:
@echo off
sqlite3.exe "db/code_status.db" ".param set :id %1" ".read sqlTest.sql"

1
谢谢您的建议!不幸的是,".parameter set"命令只能在运行sqlite3(.exe)时使用。我认为我们无法像你提出的想法那样从批处理文件中传递参数数据。因为我的命令足够简单...我决定将所有内容都放在批处理文件中,而不是创建额外的SQL脚本。这不是最聪明的方法,但是解决我的问题的快速方式 :) - Cloe Lee
我明白了,这正是为什么在批处理文件中,.param.load被连续发送为参数给sqlite3的原因。很高兴你让它工作了。总有不止一种方法来解决问题 :) - DinoCoderSaurus
感谢您提供的关于如何通过命令行发送参数的示例。官方文档在这个部分缺乏示例。不过,在我的实例中,我确实需要将“.load”更改为“.read”。 - Aabid Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接