L'objectif de cet article est d'utiliser C# pour analyser le code SQL afin d'extraire un arbre syntaxique ou une autre structure significative et d'identifier le type d'instruction représenté par chaque nœud de l'arborescence.
Pour Transact-SQL (Microsoft SQL Server), l'espace de noms Microsoft.SqlServer.Management.SqlParser.Parser est gratuit et fournit des capacités d'analyse de code SQL.
Voici un exemple de méthode qui analyse le T-SQL stocké dans une chaîne 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>
Veuillez noter que TokenInfo est une classe simple dont les propriétés correspondent aux informations du jeton. Les jetons sont une énumération de types de jetons (par exemple, TOKEN_BEGIN, TOKEN_COMMIT).
L'espace de noms Microsoft.SqlServer.Management.SqlParser est désormais disponible sous forme de package NuGet distinct : 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!