我正在尝试编写一个工具,可以将数据库的架构与安装脚本中的SQL进行比较。从数据库获取信息非常简单,但我在解析安装脚本时遇到一些麻烦。
我玩过一些出现在谷歌上的解析器,但看起来有点不完整。理想情况下,我想找到一个相当稳定且具有一半体面文档的开源解析器。
另外,我并不关心特定于某些数据库的类型和语法。需要检查的数据库非常简单。
答案 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';