解析SQL查询并提取列名和表名

我有一个像这样的查询脚本:

SELECT View1.OrderDate,View1.Email,SUM(View1.TotalPayments)FROM dbo.View1 WHERE(View1.OrderStatus =’Completed’)GROUP BY View1.OrderDate,View1.Email HAVING(SUM(View1.TotalPayments)> 75);

有没有什么方法可以从SQL查询中提取一些关键信息? 如表名和列名,我有2个问题:

  1. 我做了搜索我发现了一些解析器,如ANTLR,但我找不到解释在C#语言中使用这个解析器的文档。
  2. 我们有什么办法可以使用Entity Frame Work来解析sql查询吗? 我的查询是完全动态的,它们是在运行时创建的

我认为最好的答案是使用Irony解析器: http : //irony.codeplex.com/

Hanselman有一个很好的链接,如何使用它来解析SQL: http : //www.hanselman.com/blog/TheWeeklySourceCode59AnOpenSourceTreasureIronyNETLanguageImplementationKit.aspx

我希望这有帮助,祝你好运!

您可以使用某些系统表来获取您要查找的信息。

 select p.name ParentTable, r.name ReferencedTable, k.name KeyName from sys.foreign_keys k join sys.tables p on k.parent_object_id = p.object_id join sys.tables r on k.referenced_object_id = r.object_id 

根据数据库的一致性,您可以对关键名称进行假设。 因此,如果参考表是[用户],您可以假设您正在引用UserId,如果您的表中有多个键,这将不是您正在寻找的答案。

您可以像这样在entity framework中构建动态查询

 If(case1) { var query = db.x.where(x => x).toList(); } else { var query = db.x.where(y => y).toList() }