我想将"SELECT"SQL语句分解为其逻辑组件.即我想创建一个像"SelectSqlStatement"这样的对象,它有一个名为"Table","Where","OrderBy"等属性.我想要这样做的原因是我不想操纵一个字符串但是而是操纵一个对象并将其序列化为一个字符串.
在我为.NET编写一个之前,我想知道是否有一个可用.我做了搜索,但没有看到任何东西.
您可以使用sql server的scriptdom解析器.它在Microsoft.SqlServer.TransactSql.ScriptDom.dll中,并为您提供了构建tsql查询的TSqlFragment.
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);
}
Run Code Online (Sandbox Code Playgroud)