1

我正在使用General SQL Parser来解析SQL Select查询,不清楚的是GSP的文档没有说明如何提取子查询,例如如果我有以下SQL:

 select * from table1 join (subquery) as T2 on table1.a=T2.a

其中子查询又是另一个选择查询。如何获取子查询字符串,以便对其应用 GSP 规则?</p>

非常感谢您的帮助

4

1 回答 1

2

这是他们提供的演示代码...(取自此处)

" 这个演示说明了如何快速找出脚本中的各种 SQL 语句。找出 PLSQL 块/包/过程/函数中的所有 SQL 语句;找出 select/delete/update 语句中的嵌套子查询;找出查询在 union select 语句中;找出 where 子句、select 列表等中的子查询。"

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

using gudusoft.gsqlparser;
using gudusoft.gsqlparser.Units;

namespace findsubquerys
{
    class prg
    {
        static void Main(string[] args)
        {
            int c = Environment.TickCount;

            if (args.Length == 0)
            {
                Console.WriteLine("{0} scriptfile", "syntaxcheck");
                return;
            }

            TGSqlParser sqlparser = new TGSqlParser(TDbVendor.DbVMssql);
            sqlparser.Sqlfilename = args[0];
            int iRet = sqlparser.Parse();

            if (iRet == 0)
            {
                foreach (TCustomSqlStatement stmt in sqlparser.SqlStatements)
                {
                    printStmt(stmt);
                }

            }
            else
            {
                Console.WriteLine("Syntax error found in input sql:");
                Console.WriteLine(sqlparser.ErrorMessages);

            }
        }

        static void printStmt(TCustomSqlStatement pstmt)
        {
            Console.WriteLine(pstmt.AsText+"\n");

            for (int j = 0; j < pstmt.ChildNodes.Count(); j++)
            {
                if (pstmt.ChildNodes[j] is TCustomSqlStatement)
                {
                    printStmt((TCustomSqlStatement)(pstmt.ChildNodes[j]));
                }
            }

        }

    } //class
}
于 2013-06-20T14:35:18.267 回答