ホームページ > バックエンド開発 > C++ > C# で SQL コードを解析してツリー構造を生成する方法

C# で SQL コードを解析してツリー構造を生成する方法

Patricia Arquette
リリース: 2025-01-16 17:55:11
オリジナル
300 人が閲覧しました

How to Parse SQL Code in C# and Generate a Tree Structure?

C# での SQL コードの解析

質問: C# を使用して SQL コードを解析し、ツリー構造を生成する方法それとも他の構造物ですか?また、パーサーは、入れ子構造の正しいツリー構造を生成し、ツリー構造内のノードによって表されるステートメント タイプを返す必要があります。たとえば、ノードにループ条件が含まれている場合、ノードは「ループ タイプ」として返される必要があります。

答え:

Transact-SQL (Microsoft SQL Server) の場合は、SQL Server にある Microsoft.SqlServer.Management.SqlParser.Parser 名前空間を使用できます。これは、付属のアセンブリ Microsoft.SqlServer.Management.SqlParser.dll で提供され、自由に配布できます。

次に、T-SQL を文字列として解析して一連のトークンにするメソッドの例を示します。

IEnumerable<TokenInfo> ParseSql(string sql)
{
    ParseOptions parseOptions = new ParseOptions();
    Scanner scanner = new Scanner(parseOptions);

    int state = 0,
        start,
        end,
        lastTokenEnd = -1,
        token;

    bool isPairMatch, isExecAutoParamHelp;

    List<TokenInfo> tokens = new List<TokenInfo>();

    scanner.SetSource(sql, 0);

    while ((token = scanner.GetNext(ref state, out start, out end, out isPairMatch, out isExecAutoParamHelp)) != (int)Tokens.EOF)
    {
        TokenInfo tokenInfo =
            new TokenInfo()
            {
                Start = start,
                End = end,
                IsPairMatch = isPairMatch,
                IsExecAutoParamHelp = isExecAutoParamHelp,
                Sql = sql.Substring(start, end - start + 1),
                Token = (Tokens)token,
            };

        tokens.Add(tokenInfo);

        lastTokenEnd = end;
    }

    return tokens;
}
ログイン後にコピー

TokenInfo クラスは、上で参照したプロパティを備えた単なる単純なクラスであることに注意してください。 。

トークンは次の列挙です:

  • [Tokens Enum (Microsoft.SqlServer.Management.SqlParser.Parser)](https://docs.microsoft.com/en -us/)ドットネット/API/ microsoft.sqlserver.management.sqlparser.parser.tokens?view=sqlparser-7.3)

には、TOKEN_BEGIN、TOKEN_COMMIT、TOKEN_EXISTS およびその他の定数が含まれます。

更新: は別の nuget パッケージになりました: [Microsoft.SqlServer.Management.SqlParser](https://www.nuget.org/packages/Microsoft.SqlServer.Management.SqlParser) )。

以上がC# で SQL コードを解析してツリー構造を生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート