Sql server 为什么Microsoft.SqlServer.Transact-SQL.ScriptDom.TSqlParser无法解析简单有效的表达式?

Sql server 为什么Microsoft.SqlServer.Transact-SQL.ScriptDom.TSqlParser无法解析简单有效的表达式?,sql-server,sql-parser,scriptdom,tsql-parser,Sql Server,Sql Parser,Scriptdom,Tsql Parser,我们正在大量使用Microsoft.SqlServer.Transact-SQL.ScriptDom来处理一些SQL脚本 我们的理解是解析器应该是完全逼真的 但是,我们最近发现了以下错误: using Microsoft.SqlServer.TransactSql.ScriptDom; var parser = new TSql150Parser(true); string expr = @"IIF( (IIF(1 = 1, 1, NULL)) IS NULL, 1, 0)"; var r

我们正在大量使用Microsoft.SqlServer.Transact-SQL.ScriptDom来处理一些SQL脚本

我们的理解是解析器应该是完全逼真的

但是,我们最近发现了以下错误:

using Microsoft.SqlServer.TransactSql.ScriptDom;

var parser = new TSql150Parser(true);

string expr = @"IIF( (IIF(1 = 1, 1, NULL)) IS NULL, 1, 0)";

var res = parser.ParseExpression(new StringReader(expr), out var errors);

bool isSuccess = errors.Count == 0;
预期结果:isSuccess为true

实际结果:isSuccess为false

在SQL server works中运行以下查询:SELECT IIF((IIF(1=1,1,NULL))为NULL,1,0)

因此,我们希望解析器也能够解析它


这是一个已知的错误吗?

1)在将语句发送到解析器之前,您是否尝试将ELECT添加到语句中,这会改变什么?2) 如果不是0,errors.count的值是多少?3) 你看过错误报告了吗?3.1)若否,原因为何?3.2)如果是,返回的错误消息是什么?SELECT不是必需的,因为我使用.ParseExpression而不是.Parse。只有一个错误“附近的语法不正确”。“非常确定这是一个错误。”。考虑一下这里的投票: