我需要创建一个电子表格,列出大约100个SQL脚本中每个字段的数据库、模式、表和列名。SQL、Python或R中有什么方法可以做到这一点吗?我目前正在尝试用Python中的字符串提取来实现这一点。
电子表格需要看起来像这样:
数据库 | 架构 | 表 | 列|
---|---|---|---|
数据库1 | schema1 | 表1id | |
数据库1 | schema1 | 表1名称 | |
数据库1 | schema2 | 表2 | id|
数据库1 | schema2 | 表2 | 地址|
数据库2 | schema3 | 表3 | id|
数据库2 | schema3 | 表3 | 得分|
数据库2 | schema3 | 表4 | id|
数据库2 | schema3 | 表4 | 性别
据我所知,没有任何实用程序可以为随机SQL脚本做到这一点。
您可以编译脚本,然后在数据库目录中检查它们的依赖项。问题是,这并不总是能捕获所有内容(如动态SQL(,而且通常不会告诉您列(但这两种列都因DBMS而异(。
如果我必须这样做,我可以这样做:
-
复制脚本要使用的数据库。
-
编写DDL触发器,该触发器将捕获每一个元数据更改并以标准方式进行报告。
-
编写通用DML触发器,捕获每个数据更改的受影响表和列,然后编写一个动态SQL过程,将它们复制到每个表上。
-
对我的数据库副本运行脚本。
-
收集触发器的输出,然后将其放入Excel中。
即使这样,它仍然会错过东西(因为IF..
语句(
我估计这大约需要2-4周的时间(你的里程可能会有所不同(,所以我会将其与阅读每个脚本并手动将数据输入Excel所需的时间进行比较。
最后,我可能会手动完成。
评论中还有几个选项:
编写自己的工具来为您解析脚本:这比一开始听起来要困难得多,SQL解析起来非常困难,但如果您的DBMS有解析SQL脚本的功能,然后为您提供解析树,这可能会起作用(我不知道哪个DBMS可能有这个功能(。
如果这个脚本旨在从头开始创建数据库,那么它很容易:只需运行它,然后从系统目录中收集架构、表和列名。