在 SQL Server 中使用 mathnet-numerics 作为 CLR 程序集

问题描述 投票:0回答:2

有人成功使用 MathNet.Numerics 作为 SQL Server 中的 CLR 程序集吗?

在 Windows 8 上使用 SQL Server 2012,我成功地创建了一个指向 DLL 的 CREATE ASSEMBLY,但是当我尝试这样做时

CREATE TYPE Normal EXTERNAL NAME MathNetNumerics.[MathNet.Numerics.Distributions.Normal]

我收到一条错误消息:

“不符合UDT规范:缺少自定义属性 Microsoft.SqlServer.Server.SqlUserDefinedTYpeAttribute”。

sqlclr math.net
2个回答
0
投票

您似乎无法在 SQL CLR 中使用任意 .Net 代码,而必须专门为其开发,通过使用

SqlFunction
等属性装饰代码并使用其自己的特殊类型(如
SqlDouble
而不是仅仅
System.Double
)。

尽管如此,我希望您可以编写一个小型包装器/适配器 .Net 库,然后从那里引用和调用 Math.NET 数值例程。


0
投票

十年过去了,我终于回答了你的问题。我也尝试在 SQL Server 2017 中使用 MathNet.Numerics.dll。我有一个数据库项目(无法通过 NuGet 添加引用),其中包含一个类库项目,该项目具有对 MathNet 的引用(通过 NuGet)。我已经创建了正确的包装函数以及所有 SQL 安全设置 (http://www.sqlservercentral.com/stairway/105855/) 来安装 SQLCLR。

您无法将 MathNet.Numerics 安装到 SQL 中,因为它引用 System.ServicesModel.internals 并且该 DLL 未通过 SQLCLR 验证(因此无法将其安装到 SQL Server 中)。

我想知道是否可以创建一个包含 MathNet 的老式 DCOM,公开我需要的公共 NormSDist 函数,然后使用 SQLCLR 项目(设置为 EXTERNAL_ACCESS)在运行时加载它?

我确信这很难,因为这是我不应该做的事情。 System.ServicesModel.internals 必须使用全局变量和其他不保存在多用户 SQL 环境中的东西。

任何知道如何在 SQL 中获取 NormSDist 函数的人我知道我可以在 Excel 中做到这一点,但我需要它来处理计费的 SQL 流程。

© www.soinside.com 2019 - 2024. All rights reserved.