Question :
Comment analyser le code SQL en C# pour générer une structure arborescente qui représente la syntaxe du code et contient des informations sur le type d'instruction que chaque nœud représente ?
Réponse :
Espace de noms Microsoft.SqlServer.Management.SqlParser.Parser
Pour Transact-SQL (Microsoft SQL Server), l'espace de noms Microsoft.SqlServer.Management.SqlParser.Parser fournit une solution d'analyse puissante. Voici un exemple de méthode qui analyse une chaîne T-SQL en une séquence de jetons :
<code class="language-csharp">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; }</code>
Remarque :
TokenInfo
est une classe personnalisée dont les propriétés représentent la position du marqueur, le texte SQL et le type de marqueur. Tokens
est une énumération contenant des constantes représentant différents types de balises (par exemple, TOKEN_BEGIN
, TOKEN_COMMIT
). Conseils importants :
L'assemblyMicrosoft.SqlServer.Management.SqlParser est désormais disponible en tant que package NuGet distinct à partir de https://www.php.cn/link/e6e8bbe351bf19f963820a96543f25db.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!