Específicamente para Transact-SQL (Microsoft SQL Server) que puede utilizar the Microsoft.SqlServer.Management.SqlParser.Parser
namespace disponible en Microsoft.SqlServer.Management.SqlParser.dll, un montaje incluye con SQL Server y que se puede distribuir libremente.
Aquí hay un ejemplo de método para el análisis de T-SQL como una cadena en una secuencia de símbolos:
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;
}
Tenga en cuenta que la clase TokenInfo
es sólo una clase sencilla con las propiedades mencionadas anteriormente.
Tokens
es esta enumeración:
e incluye constantes como TOKEN_BEGIN
, TOKEN_COMMIT
, TOKEN_EXISTS
, etc.
http://stackoverflow.com/questions/34102835 – user423430