合并/标记SQL命令的方法

本文关键字:方法 命令 SQL 标记 合并 | 更新日期: 2023-09-27 18:26:26

我想将"SELECT"SQL语句分解为其逻辑组件。即,我想创建一个像"SelectSqlStatement"这样的对象,它有一个名为"Table"、"Where"、"OrderBy"等的属性。我想这样做的原因是我不想操作字符串,而是想操作对象并将其序列化回字符串。

在我为.NET写一个之前,我想知道是否有可用的。我搜索了一下,但什么也没看到。

合并/标记SQL命令的方法

您可以使用sql server的scriptdom解析器来实现这一点。它位于Microsoft.SqlServer.Transactionsql.ScriptDom.dll中,并为您提供了构建tsql查询的TSqlFragment的ast。

static void Main(string[] args)
{
    bool initialQuotedIdentifiers = false;
    TSqlParser parser = new TSql110Parser(initialQuotedIdentifiers);
    StreamReader sr = new StreamReader(@".'test.sql");
    IList<ParseError> errors;
    TSqlFragment fragment = parser.Parse(sr, out errors)
    //do stuff with the fragment
    //Generate tsql from the fragment
    StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());
    Sql110ScriptGenerator scriptGen = new Sql110ScriptGenerator();
    scriptGen.GenerateScript(fragment, sw);
}
  • LINQ
  • 实体框架
  • nHibernate
    • nHibernate作为.NET 2.0 ORM的解决方案

仅举几个例子。您正在寻找的是ORM

*所有链接都是我能很快找到的VB.

TopCoder提供了一个非常强大的SQL Parser组件。我在一个真实的项目中使用了它(也是为TopCoder构建的),它运行得很好。它的语法分析器非常复杂,有一千多行代码。重建它可能会变成一项代价高昂的工作。

听起来你真的在寻找ORM(例如nHibernate)。

SQL语法在其他方面相当复杂。如果你真的想解析,那么你需要搜索BNF语法,或者根据在线图书中提供的内容滚动你自己的BNF。快速搜索并没有避开微软t-SQL的现有语法,尽管它们确实存在于标准SQL中。祝你一切顺利!