我正在尝试使用微软提供的TSql100Parser解析SQL。现在,我在使用它时遇到了一些问题,它似乎是想要使用的方式。此外,缺乏文档也无济于事。(示例:http://msdn.microsoft.com/en-us/library/microsoft.data.schema.scriptdom.sql.tsql100parser.aspx )
当我通过解析器运行一条简单的SELECT语句时,它返回一个包含SELECT语句的TSqlStatements集合。问题是,TSqlSelect语句不包含WHERE子句等属性,即使该子句是作为类实现的。http://msdn.microsoft.com/en-us/library/microsoft.data.schema.scriptdom.sql.whereclause.aspx解析器通过查看令牌流来识别WHERE子句。所以,我的问题是,我是否正确地使用了解析器?现在,令牌流似乎是解析器最有用的功能……
我的测试项目:
public static void Main(string[] args)
{
var parser = new TSql100Parser(false);
IList<ParseError> Errors;
IScriptFragment result = parser.Parse(
new StringReader("Select col from T1 where 1 = 1 group by 1;" +
"select col2 from T2;" +
"select col1 from tbl1 where id in (select id from tbl);"),
out Errors);
var Script = result as TSqlScript;
foreach (var ts in Script.Batches)
{
Console.WriteLine("new batch");
foreach (var st in ts.Statements)
{
IterateStatement(st);
}
}
}
static void IterateStatement(TSqlStatement statement)
{
Console.WriteLine("New Statement");
if (statement is SelectStatement)
{
PrintStatement(sstmnt);
}
}
https://stackoverflow.com/questions/1779737
复制相似问题