简体   繁体   English

从任何“SQL 查询”字符串中提取列名和表名

[英]extract column names and table name from any “SQL query” String

Consider I have a SQL query like this:考虑我有一个这样的 SQL 查询:

SELECT c_mandant, 
    hist_datum, 
    parkey1, 
    parkey2, 
    funktionscode, 
    ma_parkey, 
    me_parkey , 
    CASE 
        WHEN EXISTS 
            ( 
           SELECT 1 
           FROM   cds_h_gruppe GRP1 
           WHERE  grp1.c_mandant = c_mandant 
           AND    grp1.hist_datum = Add_months(Last_day(Trunc(sysdate)), -1)
           AND    grp1.funktionscode = 'H' 
           AND    grp1.parkey1 = ma_parkey
       ) THEN 1 
        ELSE NULL 
    END ma_me , 
    CASE 
        WHEN EXISTS 
            ( 
           SELECT 1 
           FROM   cds_h_gruppe GRP2 
           WHERE  grp2.c_mandant = c_mandant 
           AND    grp2.hist_datum = Add_months(Last_day(Trunc(sysdate)), -1)
           AND    grp2.funktionscode = 'U' 
           AND    grp2.parkey1 = me_parkey
       ) THEN 1 
        ELSE NULL 
    END me_ma,
    Row_number() OVER (partition BY c_mandant, ma_parkey, me_parkey ORDER BY c_mandant, ma_parkey, me_parkey) anz_ma
FROM     
( 
     SELECT c_mandant, 
     hist_datum, 
     parkey1, 
     parkey2, 
     funktionscode , 
     CASE 
       WHEN funktionscode = 'U' THEN parkey1 
       ELSE parkey2 
     END ma_parkey , 
     CASE 
       WHEN funktionscode = 'U' THEN NULL 
       ELSE parkey1 
     END me_parkey 
     FROM   cds_h_gruppe 
     WHERE  funktionscode IN ('U', 
             'H') 
     AND    hist_datum = Add_months(Last_day(Trunc(sysdate)), -1)

I want to extract table names and column names from the query.我想从查询中提取表名和列名。 The result should look some thing like结果应该看起来像

Tables:表格:

CDS_H_GRUPPE

Columns:列:

CDS_H_GRUPPE.c_mandant    
CDS_H_GRUPPE.funktionscode    
CDS_H_GRUPPE.hist_datum    
CDS_H_GRUPPE.parkey1 
CDS_H_GRUPPE.parkey2

Can I extract column names and table names from any complex query string, which is valid for Oracle, SQL server or DB2?我可以从任何对 Oracle、SQL Server 或 DB2 有效的复杂查询字符串中提取列名和表名吗?

Don't try to parse it yourself, use an SQL Parser.不要尝试自己解析它,使用 SQL 解析器。 Apparently, Entity Framework used to have one , but no longer does.显然,实体框架曾经有一个,但现在没有了。 There seem to be a few more, such as this one from the Irony Project.似乎有几个,比如这一个从反讽项目。

There's a commercial parser that you can get for $900 ($1,900 if you want to distribute your code apparently).有一个商业解析器,你可以花 900 美元获得(如果你想分发你的代码,则需要 1,900 美元)。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM