Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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查询语句_C#_String - Fatal编程技术网

C# 如何为表名解析SQL查询语句

C# 如何为表名解析SQL查询语句,c#,string,C#,String,我有一个表示SQL查询的字符串,需要从该字符串中提取表的名称。例如: SELECT * FROM Customers 将返回“客户”。或 将返回“客户、地址”。越来越高级: (SELECT B FROM (SELECT C FROM (SELECT Element AS C FROM MyTable))) 只需返回“MyTable” (注意,我可能打错了问题,但你明白了) 实现这一点的最佳/最准确的方法是什么?这里有一种方法,使用商业实用程序(sqlparser.com$149,免费试用)

我有一个表示SQL查询的字符串,需要从该字符串中提取表的名称。例如:

SELECT * FROM Customers
将返回“客户”。或

将返回“客户、地址”。越来越高级:

(SELECT B FROM (SELECT C FROM (SELECT Element AS C FROM MyTable)))
只需返回“MyTable”

(注意,我可能打错了问题,但你明白了)


实现这一点的最佳/最准确的方法是什么?

这里有一种方法,使用商业实用程序(sqlparser.com$149,免费试用)

请注意,它将“c”和“a”作为表计算,但从结果中筛选出单字符名称将非常简单


我不使用或拥有这个工具,只是在搜索后发现的东西…

Brian提到的通用SQL解析器可以更准确地实现这一点,这里有一篇文章:


我想到了“为什么?”这个问题……您是否针对特定的RDBMS/方言?关于解析SQL还有一些问题,例如,我所看到的没有什么特别明确的结论。至于“为什么”,是因为我正在解析一个查询日志文件,并显示访问量最大的表、操作等。。这并不重要:)至于我的目标是什么,这是MS-SQL。@esac:这很重要。因为有时人们会发布问题,询问问题的具体解决方案,而不是实际问题本身。@jpaugh大约25年前,当我还是个小男孩时,我选择了这个屏幕名称。当时,一个名为“Red Hat”的linux新发行版刚刚上市。我几乎只使用Linux 5年,然后我找到了一份工作,进入了Windows计算机的商业世界。这是一个良好的开端,尽管它使用了“c”和“a”这两个词让人恼火,因为有些词的别名更长。
(SELECT B FROM (SELECT C FROM (SELECT Element AS C FROM MyTable)))
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using gudusoft.gsqlparser;

namespace GeneralSqlParserTest
{
    class Program
    {
        static void Main(string[] args)
        {
            TGSqlParser sqlparser = new TGSqlParser(TDbVendor.DbVMssql);

            sqlparser.SqlText.Text = "SELECT * FROM Customers c, Addresses a WHERE c.CustomerName='foo'";
            sqlparser.OnTableToken += new TOnTableTokenEvent(OnTableToken);

            int result = sqlparser.Parse();
            Console.ReadLine();
        }

        static void OnTableToken(object o, gudusoft.gsqlparser.TSourceToken st, gudusoft.gsqlparser.TCustomSqlStatement stmt)
        {
            Console.WriteLine("Table: {0}", st.AsText);
        }
    }
}