I have a Query Script like this:
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);
Is there any approach that we can pull some key information out from SQL query? such as table name and column name ,I have 2 question:
- I did search I found some parser such as ANTLR , but I could not find documentation that explain the using of this parser in C# language.
- Is there any way we can use Entity Frame Work to parsing sql query? My queries are fully dynamic and they are created at run time
I think the best answer is going to be to use the Irony parser: http://irony.codeplex.com/
Hanselman has a great link to how to use it to parse SQL: http://www.hanselman.com/blog/TheWeeklySourceCode59AnOpenSourceTreasureIronyNETLanguageImplementationKit.aspx
I hope this helps, and best of luck!
You could use some of the system tables to get at the information you are looking for.
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
Depending on how consistent your database is you can make assumptions to what the Key Name would be. So if the reference table was [User] you could assume that you are referencing the UserId, if you have multiple keys in your table this wouldn't be the answer you are looking for.
You can build dynamic queries in entity framework like this
If(case1)
{
var query = db.x.where(x => x).toList();
}
else
{
var query = db.x.where(y => y).toList()
}
来源:https://stackoverflow.com/questions/12483173/parsing-sql-query-and-pull-out-column-name-and-table-name