解析SQL查询,并拉出列名和表名(Parsing SQL Query and pull out co

2019-09-22 13:51发布

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

选取(View1.OrderStatus = '已完成')View1.OrderDate,View1.Email,SUM(View1.TotalPayments)FROM dbo.View1 GROUP BY View1.OrderDate,View1.Email HAVING(SUM(View1.TotalPayments)> 75);

有没有我们可以拉一些关键的信息从SQL查询任何方法? 如表名和列名,我有2个问题:

  1. 我搜索我发现了一些解析器如ANTLR,但我无法找到解释使用该解析器在C#语言的文档。
  2. 有什么办法,我们可以使用实体框架工作来解析SQL查询? 我的查询是完全动态的,它们在运行时创建

Answer 1:

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

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

我希望这有助于和好运!



Answer 2:

你可以使用一些系统表来获得你正在寻找的信息。

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

这取决于如何一致的数据库是你可以假设一下项名称将是。 因此,如果参照表为[用户]你可以假设你引用的用户ID,如果您有多个钥匙放在桌子这不会是你正在寻找的答案。



Answer 3:

你可以建立在实体框架动态查询这样的

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


文章来源: Parsing SQL Query and pull out column name and Table name