Soalan:
Bagaimana untuk menghuraikan kod SQL dalam C# untuk menjana struktur pokok yang mewakili sintaks kod dan mengandungi maklumat tentang jenis pernyataan yang diwakili oleh setiap nod?
Jawapan:
Microsoft.SqlServer.Management.SqlParser.Parser ruang nama
Untuk Transact-SQL (Microsoft SQL Server), ruang nama Microsoft.SqlServer.Management.SqlParser.Parser menyediakan penyelesaian penghuraian yang berkuasa. Berikut ialah kaedah contoh yang menghuraikan rentetan T-SQL ke dalam urutan token:
<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>
Nota:
TokenInfo
ialah kelas tersuai yang sifatnya mewakili kedudukan penanda, teks SQL dan jenis penanda. Tokens
ialah penghitungan yang mengandungi pemalar yang mewakili jenis teg yang berbeza (cth., TOKEN_BEGIN
, TOKEN_COMMIT
). Petua Penting:
HimpunanMicrosoft.SqlServer.Management.SqlParser kini tersedia sebagai pakej NuGet yang berasingan daripada https://www.php.cn/link/e6e8bbe351bf19f963820a96543a96543f25db>
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghuraikan Kod SQL dalam C# untuk Mencipta Pokok Sintaks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!