从SQL Server 2008执行.NET托管程序集 - 优点,缺点和;建议

时间:2010-06-17 01:12:23

标签: .net sql-server-2008 assemblies

寻找我目前面临的以下方案的意见/建议/链接。

平台:

  • .NET 4.0 Web应用程序
  • SQL Server 2008

任务:

  • 检修系统的一个组件,该组件基于特定的用户活动执行(相当)复杂的数学运算,并更新数据库中的多个表。普通用户活动可能是“Bob”决定发布论坛主题。这导致(最终解决方案)需要查看各种因素(关于他所做的帖子),然后在基于查找值/比率以及数据库中的其他数据进行一些数学运算之后,插入一些其他数据作为结果这些行动。

选项:

好的 - 所以这就是我的想法。虽然在C#(LINQ-SQL)中执行此操作要容易得多,但它没有多大意义,因为大多数计算都是基于db中的值,并且随着时间的推移很难控制/优化/调试LINQ 。 因此,我倾向于创建一个托管程序集(C#类库),它包含查找值(常量)以及利用现有.NET BCL中的数学类。基本上我会公开一些可以由T-SQL存储过程调用的方法。

这对我来说有以下优点:

  1. 简单的数学。在.NET中进行复杂的数学运算与T-SQL中的复杂数学运算。没问题。 =)
  2. 从原始T-SQL中抽象计算,可配置的“查找”值和业务逻辑。
  3. T-SQL只需要关心数据,简化存储过程并使其更易于维护。当需要进行数学运算时,它会委托给托管程序集。
  4. 所以,说过 - 我以前从未这样做过(从T-SQL调用.NET assmembly),经过一些谷歌搜索后我能想到的最好的网站是here,这很有用但是已经过时了。

    所以 - 我在问什么?嗯,首先 - 我需要一些更好的参考,如何实际做到这一点。 “这是”如何从SQL Server 2008中的T-SQL存储过程中调用C#.NET 4程序集。其次,谁在那里做了这个,你遇到了什么问题(如果有的话)?

    意识到这可能很难提供一个“正确答案”,所以不好试着把它给予我一个好的链接和一个pro / con / /这个实现的问题列表给你答案的人。

    干杯!

2 个答案:

答案 0 :(得分:1)

关于SQL CLR的一个很好的介绍是Using CLR Integration in SQL Server 2005。 SQL Server CLR将仅加载CLR 2.0,并且只加载已批准库的子集,请参阅Supported .NET Framework Libraries。 .Net 3.5库(即.Linq)不受支持,但可以自行承担风险。但是,您无法成功将.Net 4程序集加载到SQL Server 2005,2008或2008 R2中。

答案 1 :(得分:0)

使用SQL Server运行托管程序集并不太复杂,只需按照Microsoft示例

即可

但总的来说这是一个坏主意,你正在混合责任,并可能试图过早地优化

只需制作干净利落的代码,使用无需复杂的系统即可完成工作,而“下一个人”会感谢您的支持