如何检查SQLite3语法?

如何检查SQLite3语法?,sqlite,syntax-checking,Sqlite,Syntax Checking,有没有办法在不运行SQLite3脚本的情况下检查其语法 基本上,我正在寻找SQLite3的等价物ruby-cscript.rb,perl-cscript.pl,php--syntax-check-script.php,等等 我曾想过使用explain,但我想检查的大多数脚本都是为了参考而保留的(不一定有关联的数据库)。使用explain也会使它难以与类似的东西一起使用。(也就是说,我只想检查语法,而不是语义。) 更新: 我很困惑。假设我要检查以下语法: select * from foo; 我

有没有办法在不运行SQLite3脚本的情况下检查其语法

基本上,我正在寻找SQLite3的等价物
ruby-cscript.rb
perl-cscript.pl
php--syntax-check-script.php
,等等

我曾想过使用
explain
,但我想检查的大多数脚本都是为了参考而保留的(不一定有关联的数据库)。使用
explain
也会使它难以与类似的东西一起使用。(也就是说,我只想检查语法,而不是语义。)

更新:

我很困惑。假设我要检查以下语法:

select * from foo;
我可以这样做:

echo 'explain select * from foo;' | sqlite3
但我得到:

SQL error near line 1: no such table: foo

我希望看到的只是“语法OK”(或类似的东西)。这可能吗?

您可能可以对内存中的数据库使用EXPLAIN。使用sqlite3,您可以通过将“:memory:”作为文件名传递给sqlite3\u open\u v2(),来获取内存中的数据库。

如您所述,您可以使用关键字。如果省略前面的EXPLAIN关键字,它将返回有关如何执行语句的信息。

到目前为止,Ruby gem是一个非常适合我的语法检查器

它检查ANSI SQL:它不是特定于
sqlite
方言的

2015年,在这个问题被提出5年后,它问世了

它需要Ruby和C编译器(来构建
pg_查询
native扩展)

以下是一个输出示例:

$sqlint ex7a.sql
ex7a.sql:81:10:错误语法错误位于或接近“*”


在真正的Unix传统中,如果语法正确,sqlint不会生成任何输出。正如提问者所问,它不会检查表是否存在。

这接近我的想法:谢谢分享!几周前我意识到了
sqlint
,但你的回答让我实际安装并试用了它。