SQL Server - 是否有工具可以将 T-SQL 存储过程转换为 C#

本文关键字:T-SQL 存储过程 转换 Server 是否 工具 SQL | 更新日期: 2023-09-27 17:56:51

2017年更新:

实际上,答案是否定的,即使有,您也应该非常谨慎地使用它

实际上只有两种方法可以解决这个问题:

a) 咬紧牙关,手动和煞费苦心地转换所有内容,并使用某种验证方法来检查所有内容是否继续按预期运行,例如单元/回归测试。使用像Linqer这样的工具(如果有的话)作为帮助,来解决部分问题。

b) 从头开始。

没有选项c)让其他东西整齐和自动地处理所有事情,它不可能涵盖所有情况。T-SQL 可以做很多 LINQ 做不到的事情(更新、插入和删除浮现在脑海中),还有很多事情最好在 C# 中以不同的方式做(比如游标)。

很少有像这样的问题得到精心设计、详尽的解决方案,可以信任这些解决方案不会倒退功能(比如商业 VB6 到 VB.NET 转换器,由于那里的潜在客户数量庞大,可以证明花费大量精力是合理的,如果出现问题,你可以拿起电话或律师),所以如果存在这样的工具,你应该非常小心。从 SQL 的 LINQ 兼容子集到 LINQ 的转换是一个有界的问题,这个问题被 很好地理解了,我认为 Linqer 是可以信任的。

这个问题试图找出一个可以帮助选项 a) 的工具,但我想很多人都在阅读这篇文章,正在寻找选项 c)。这个问题和答案有一个子集并不是一个可怕的想法,但它不会自动消除剩余的负担,因为即使是许多简单的存储过程也不仅仅是以 LINQ 可表达的形式进行查询。对于我提到的任何项目,做选项a)仍然太站不住脚了。


原始问题如下:

我有几个项目需要维护,它们使用了很多SQL Server存储过程(在T-SQL中)。我知道如何维护它们,但由于有许多工具可以在不同语言之间自动转换,我想知道是否有任何工具可以将存储过程转换为 C# 代码?

我不想将它们转换为 CLR 存储过程;我只想将数据层中的逻辑迁移到项目的 C# 端,并自动执行繁重的工作。大多数存储过程(也许是 70%?)都是简单的"SELECT * FROM table WHERE id = @id"事务,它们也可以用实体框架来完成。

我知道T-SQL和C#之间不是一条直线,因为它是从 VB.NET 到C#,而且转换并不那么简单;例如,您需要在C#中引入数据层,并且像游标之类的东西没有相应的概念。如果可能的话,我只想摆脱存储过程,而无需重复的体力劳动。

由于错误的假设对此提出了质疑:我已经知道 T-SQL,并且给定这些存储过程中任何一个的代码,我可以告诉您它们的作用。我不希望逻辑继续驻留在存储过程中是有很好的实际原因的。

SQL Server - 是否有工具可以将 T-SQL 存储过程转换为 C#

查看 Linqer:

Linqer 是一个 SQL 到 LINQ 转换器 工具。它可以帮助您学习 LINQ 和 转换现有的 SQL 语句。

并非每个 SQL 语句都可以 转换为 LINQ,但 Linqer 涵盖 许多不同类型的 SQL 表达 式。

因为 LINQ 是 C# 的一部分,所以它是 对数据类型转换敏感。 林克执行所需的类型铸件 在生成的 LINQ 语句中。