【问题标题】:Is there a way to parser a SQL query to pull out the column names and table names?有没有办法解析 SQL 查询以提取列名和表名?
【发布时间】:2010-09-08 13:44:21
【问题描述】:

我在单独的文本文件中有 150 多个 SQL 查询,我需要分析这些查询(只是实际的 SQL 代码,而不是数据结果),以便识别所有使用的列名和表名。最好是每列和表格出现的次数。使用嵌套的 SELECT 语句等编写一个全新的 SQL 解析程序比看起来要复杂得多。

必须有一个程序或代码可以做到这一点(或类似的东西),但我还没有找到它。

【问题讨论】:

    标签: sql parsing


    【解决方案1】:

    我实际上最终使用了一个名为 SQL Pretty Printer。您可以购买桌面版,但我只是使用了免费的在线应用程序。只需将查询复制到文本框中,将输出设置为“列出数据库对象”,然后单击格式化 SQL 按钮。

    它使用大约 150 个不同(和复杂)的 SQL 查询非常有效。

    【讨论】:

    • 保存了我的 *$$ :) 谢谢。
    【解决方案2】:

    如何在 MS SQLServer 中使用执行计划报告?您可以将其保存到一个 xml 文件中,然后可以对其进行解析。

    【讨论】:

      【解决方案3】:

      你可能想看看这样的东西:

      JSqlParser

      它使用 JavaCC 来解析查询字符串并将其作为对象图返回。我从未使用过它,所以我无法保证它的质量。

      【讨论】:

        【解决方案4】:

        如果您的应用程序需要这样做,并且可以访问包含表等的数据库,您可以运行以下命令:

        SELECT TOP 0 * FROM MY_TABLE
        

        使用 ADO.NET。这将为您提供一个 DataTable 实例,您可以查询其列及其属性。

        【讨论】:

          【解决方案5】:

          请使用 antlr... 编写语法 n 按照步骤..在 antlr 站点中给出..最终您将获得 AST(抽象语法树)。对于给定的查询...我们可以遍历它并带来查询中存在的所有表、列..

          【讨论】:

            【解决方案6】:

            在 DB2 中,您可以在查询中附加如下内容,但 1 是您可以指定的最小值;如果您尝试指定 0,它将引发错误:

            FETCH FIRST 1 ROW ONLY

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-03-03
              • 2016-06-08
              • 1970-01-01
              • 2020-07-01
              • 1970-01-01
              • 2020-09-18
              • 2014-08-04
              • 1970-01-01
              相关资源
              最近更新 更多