我正在尝试使用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的任何想法?谢谢!
答案 0 :(得分:1)
ParseStatementList用于解析可以在批处理或存储过程正文中的语句。像CREATE VIEW(以及CREATE / ALTER proc,触发器,函数等)的语句。必须是批处理中的唯一语句,因此不能包含在任何其他类型的StatementList中。这些语句只会在批处理的语法规则中解析,因此ParseStatementList无法识别它们。
为什么要在这里使用ParseStatementList而不是Parse或ParseBatch?