Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通用SQL解析器,从SQL中获取子查询_C#_Sql_Parsing_Select - Fatal编程技术网

C# 通用SQL解析器,从SQL中获取子查询

C# 通用SQL解析器,从SQL中获取子查询,c#,sql,parsing,select,C#,Sql,Parsing,Select,我正在使用解析SQL Select查询,不清楚的是GSP的文档没有说明如何提取子查询,例如,如果我有以下SQL: select * from table1 join (subquery) as T2 on table1.a=T2.a 其中子查询是另一个重新选择查询。如何获取子查询字符串,以便对其应用GSP规则 非常感谢您的帮助这是他们提供的演示代码。。。(: " 本演示演示如何快速查找脚本中的各种SQL语句。查找PLSQL块/包/过程/函数中的所有SQL语句;查找select/delete/

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

 select * from table1 join (subquery) as T2 on table1.a=T2.a
其中子查询是另一个重新选择查询。如何获取子查询字符串,以便对其应用GSP规则


非常感谢您的帮助

这是他们提供的演示代码。。。(:

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

使用系统;
使用System.Collections.Generic;
使用系统文本;
使用System.IO;
使用gudusoft.gsqlparser;
使用gudusoft.gsqlparser.Units;
命名空间查找子查询
{
类prg
{
静态void Main(字符串[]参数)
{
int c=Environment.TickCount;
如果(args.Length==0)
{
WriteLine(“{0}脚本文件”,“语法检查”);
返回;
}
TGSqlParser sqlparser=新的TGSqlParser(tdbvendo.DbVMssql);
sqlparser.Sqlfilename=args[0];
int-iRet=sqlparser.Parse();
如果(iRet==0)
{
foreach(sqlparser.SqlStatements中的TCustomSqlStatement stmt)
{
printsmt(stmt);
}
}
其他的
{
WriteLine(“在输入sql中发现语法错误:”);
WriteLine(sqlparser.ErrorMessages);
}
}
静态void printsmt(TCustomSqlStatement pstmt)
{
Console.WriteLine(pstmt.AsText+“\n”);
对于(int j=0;j
Thx对于示例,我设法运行您的代码printsmt在新行中打印每条语句。以下是输出:
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
}