Как проанализировать оператор SQL Query для названий таблиц

У меня есть строка, представляющая SQL-запрос, и я должен извлечь названия таблиц от той строки. Например:

SELECT * FROM Customers

Возвратил бы "Клиентов". Или

SELECT * FROM Customers c, Addresses a WHERE c.CustomerName='foo'

SELECT a.AddressZip FROM Customers c
INNER JOIN Addresses a ON c.AddressId=a.AddressId

Возвратил бы "Клиентов, Адреса". Быть более усовершенствованным:

(SELECT B FROM (SELECT C FROM (SELECT Element AS C FROM MyTable)))

Просто возвратил бы "MyTable"

(Отметьте, у меня может быть typo'd запросы, но Вы получаете идею).

Каков был бы лучше всего/больше всего точный способ выполнить это?

5
задан esac 26 June 2010 в 01:17
поделиться

1 ответ

Вот способ сделать это с помощью коммерческой утилиты (sqlparser.com $ 149, бесплатная пробная версия)

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);
        }
    }
}

Обратите внимание, что он считает 'c' и 'a' как таблицы, но было бы довольно просто отфильтровать отдельные символьные имена из ваших результатов

Я не использую и не владею этим инструментом, просто то, что я нашел после некоторого поиска. ..

4
ответ дан 14 December 2019 в 18:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: