前言
最近收到一个小任务,找到一段select语句中需要的表和字段,用作权限管理。以前这样的任务都是手动一个一个找,但那时select语句较为简短的时候,这次语句就很复杂了。所以,记录一下解决过程。
问题来源
当数据库非常庞大时,相应的权限管理也是非常复杂。对于不同的任务,我们需要赋予不同的表、字段权限。
现在我们有了一个已经写好的sql任务,这项任务需要移交到另外一个账号下作进一步的数据整合分析。那么数据的权限就需要相应进行分配,所以需要查找复杂sql语句需要的表和字段。
解决步骤
因为sql语句较为复杂,最好能找到相应的工具导出所需的表和字段。首先想到的是在网上搜索对应的解决方案或者在线工具,但没有收获。之后,考虑网上的内容多是通用的,这一类少见的问题很难搜到答案。
那哪里的sql对应功能比较多呢?数据库管理软件。我想到的是DataGrip,编程ide通常会有代码补全和生成功能,可能会有我们需要的。
在数据库中新建一个测试数据库,DataGrip连接,再复制代码。我们可以看到代码红色报错。
将鼠标悬停至table表,我们可以看到一个功能——生成table表格。接下的思路就清晰了,生成所有表格和字段至sql语句无报错,再将数据库结构导出即可。
点击添加表到数据库,弹出创建表界面。
界面中会显示表中所有字段、字段类型及创建表的sql语句。我写的sql有点问题,主要是想展现这个功能对应的缺陷。
1 重复字段
此功能是根据sql语句检索生成的,当同一张表的字段多次调用,会在此页面展示多个。
如果字段较少可以手动右侧增加、删除。字段较多时,我采用的是在线文本去重工具。复制sql语句,去相同行,再粘贴到sql script中。再次执行仍可能提示有重复,原因为文本去重为按行,sql最后一个字段末尾没有逗号,需要手动修正。
2 大小写转换
重复字段去除后,发现大小写不同的仍未去除,报错重复字段。这是代码不规范的问题,全选之前的代码,使用ctrl+shift+U统一大小写格式。
以上为题解决后,即可执行sql,生成table。如果生成所有table后,还有字段报错,也可按照提示继续添加字段到table。
此外,此功能生成的字段格式等皆为默认,如需修改,在create new table页面添加。