谁能推荐一个好的SQL解析器?

时间:2008-11-06 15:57:39

标签: sql database parsing ddl

我正在尝试编写一个工具,可以将数据库的架构与安装脚本中的SQL进行比较。从数据库获取信息非常简单,但我在解析安装脚本时遇到一些麻烦。

我玩过一些出现在谷歌上的解析器,但看起来有点不完整。理想情况下,我想找到一个相当稳定且具有一半体面文档的开源解析器。

另外,我并不关心特定于某些数据库的类型和语法。需要检查的数据库非常简单。

6 个答案:

答案 0 :(得分:1)

General SQL Parser很不错。你可能已经找到它了,但是你说SQL很简单,它对你没有什么作用呢?

答案 1 :(得分:1)

某些数据库(例如postgresql)允许您查询当前架构。因此,您可以转向另一个方向:您可以创建SQL语句,查询所需的字段和表,以查看它们是否位于数据库中的模式中,而不是尝试获取模式并解析SQL。

以下是一个示例:postgresql schema metadata

答案 2 :(得分:1)

我使用了SQL Compare,这非常棒。

您可以运行安装脚本来创建新数据库,然后将现有数据库与新数据库进行比较。

答案 3 :(得分:0)

SQL Server可能会为您做一些这样的事情。它提供了一个非常好的依赖树,可以通过SDK访问。

答案 4 :(得分:0)

说真的,特别是对于简单的数据库,您的SQL Server内置了一个很棒的SQL解析器。

创建架构并加载它。比较数据,然后在完成后删除架构。

如果您害怕运行DDL,那么可能使用多个轻量级嵌入式服务器中的一个将为您完成工作(如果您运行Java,则为Derby)。

然后就像现在一样获得解析后的SQL并访问表。

您拥有数据库,如果可以,您也可以利用它。

答案 5 :(得分:0)

如果您有DDL来创建表,请解析表名并为此预先添加一些生成的表名。根据您使用的SQL引擎,您可以使用不同的方式查询架构:

使用SQLite:

PRAGMA table_info(my_table)
PRAGMA table_info(temporary_my_table)

或者在MySQL上:

 SELECT table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'my_schema'
AND (table_name LIKE '%my_table';