内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
TSqlSelect语句也不包含诸如WHERE子句的属性。
http://msdn.microsoft.com/en-us/library/microsoft.data.schema.scriptdom.sql.whereclause.aspx
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);
}
}
想知道如何获得SELECT语句的全部元素,下面的代码解释如下:
QuerySpecification spec = (QuerySpecification)(((SelectStatement)st).QueryExpression); StringBuilder sb = new StringBuilder(); sb.AppendLine("Select Elements"); foreach (var elm in spec.SelectElements) sb.Append(((Identifier)((Column)((SelectColumn)elm).Expression).Identifiers[0]).Value); sb.AppendLine(); sb.AppendLine("From Elements"); foreach (var elm in spec.FromClauses) sb.Append(((SchemaObjectTableSource)elm).SchemaObject.BaseIdentifier.Value); sb.AppendLine(); sb.AppendLine("Where Elements"); BinaryExpression binaryexp = (BinaryExpression)spec.WhereClause.SearchCondition; sb.Append("operator is " + binaryexp.BinaryExpressionType); if (binaryexp.FirstExpression is Column) sb.Append(" First exp is " + ((Identifier)((Column)binaryexp.FirstExpression).Identifiers[0]).Value); if (binaryexp.SecondExpression is Literal) sb.Append(" Second exp is " + ((Literal)binaryexp.SecondExpression).Value);