解析 TSQL 选择查询并返回列表达式

Posted

技术标签:

【中文标题】解析 TSQL 选择查询并返回列表达式【英文标题】:Parse TSQL select query and return column expressions 【发布时间】:2021-08-20 11:04:29 【问题描述】:

我正在 c# 中寻找一个函数或一些 TSQL 解析器,其中 TSQL 选择查询将是一个输入参数,该函数的输出将是一个包含所有字段及其在该选择查询上编写的复杂表达式的表。已经在 ggl 上找到了一些解决方案,但仅限于解析 SQL 查询并提取列名和正在使用的表。

输入 TSQL:

@sql = 'Select case when 1=1 then 'Equal' else 'Not Equal' end as [FirstColumn], ISNULL(somefield) as [SecondColumn], '3rd field' as [ThirdColumn], someTable.anotherColumn from一些表'

所需的输出表:

注意 - 例如,我在这里使用了小查询,但实际上有一个大的选择 TSQL 查询,其中编写了复杂的 sql 逻辑。

任何帮助将不胜感激!谢谢。

【问题讨论】:

通过正则表达式可以解决你的问题参考link 【参考方案1】:

您可以使用 DbSet 中的 SqlQuery 方法:

var result = await dbContext.Entities.SqlQuery("....").ToListAsync();

https://docs.microsoft.com/en-us/dotnet/api/system.data.entity.dbset-1.sqlquery?view=entity-framework-6.2.0#System_Data_Entity_DbSet_1_SqlQuery_System_String_System_Object___

【讨论】:

感谢您的快速响应...但不幸的是,我没有任何可以用来生成/使用 dbContext 方法的表模式。我只有一个大的选择查询作为纯字符串,没有可用的数据库模式。 在这种情况下,根据我的经验,您有两个选择:您可以自己定义适当的类,或者我建议直接使用 ADO .NET 而不使用任何 ORM,以防万一您没有模型类 orm 不会给您带来受益。

以上是关于解析 TSQL 选择查询并返回列表达式的主要内容,如果未能解决你的问题,请参考以下文章

TSQL将N插入固定临时表

TSQL - 选择插入的行

TSQL 分组集(Grouping Sets)

TSQL UDF 根据第一个函数参数的值返回具有不同列数的表

使用 EXISTS 的 TSQL 返回的记录多于预期

翻译(9w)