ParseStatementList无法处理有效的SQL语句

时间:2009-04-16 14:29:38

标签: c# .net sql parsing

我正在尝试使用TSql100Parser.ParseStatementList方法以编程方式解析sql语句并提取对象名称。这来自Microsoft.Data.Schema.ScriptDom.Sql命名空间。这是代码:

string sql = "CREATE VIEW testView AS SELECT * from testTable";
var parser = new TSql100Parser(false);
StatementList parsedStatements; IList errrors;

using (TextReader reader = new StringReader(sql)) 
{ 
       parsedStatements = parser.ParseStatementList(reader, out errors);
}

ParseStatementList方法返回null,并将两个错误插入错误列表。错误是“CREATE附近的语法无效”和“VIEW附近的语法无效”。这很奇怪,因为TSql100.Parse方法成功解析了相同的sql语句。还有一点很奇怪,上面的代码成功地解析了SQL“DROP VIEW testView”

为什么它不会解析我的视图创建sql的任何想法?谢谢!

1 个答案:

答案 0 :(得分:1)

ParseStatementList用于解析可以在批处理或存储过程正文中的语句。像CREATE VIEW(以及CREATE / ALTER proc,触发器,函数等)的语句。必须是批处理中的唯一语句,因此不能包含在任何其他类型的StatementList中。这些语句只会在批处理的语法规则中解析,因此ParseStatementList无法识别它们。

为什么要在这里使用ParseStatementList而不是Parse或ParseBatch?