在以后要评估的数据库中存储公式(方程式)(SQL Server 2005)

时间:2012-03-15 15:21:34

标签: sql-server database sql-server-2005 formula equation

我正在根据数据集计算线性回归。我不知道编译时的回归模型或参数数量。

我将回归方程存储在SQL Server 2005数据库中作为字符串

y = 3x^2 + 2x // just an example

当我需要进行预测时,我从数据库中获取等式,用我预测的值替换x,并使用NCalc来评估结果字符串。

该方法似乎工作正常,但我想知道是否有更好的方法或SQL Server的内置功能,我错过了允许我在数据库端进行 /强>

4 个答案:

答案 0 :(得分:2)

我建议按照这些方针将它放入一个函数中。然后,您可以直接调用该函数,并且可以轻松地将计算值包含在视图集中以进行报告。

CREATE FUNCTION dbo.getRegression 
( @xvalue AS NUMERIC(18,2) --set the precision and scale as appropriate for your data
)
RETURNS NUMERIC(18,2)
    AS
    BEGIN
        DECLARE @yvalue as NUMERIC (18,2) 
        set @yvalue = POWER(2,(3*@xvalue)) + (2*@xvalue)
        RETURN @yvalue
    END
;

答案 1 :(得分:2)

您可以编写仍使用NCalc进行计算的CLR存储过程。

答案 2 :(得分:2)

这不是答案,但我没有足够的声誉来发表评论。

  

“您可以编写一个仍然使用NCalc进行计算的CLR存储过程。”

您可以这样做,但请记住,您只能添加对只能引用其他Sql Server项目的Sql Server Projects的引用。所以你可以创建一个SqlServer项目并链接来自NCalc项目的所有文件并尝试构建它,但是你必须对NCalc项目的所有引用也做同样的事情。并非所有这些都是开源的。我想你可以使用Reflector来反编译所有这些引用,并将这些文件也放在SqlServer项目中。

但是如果你确实做了这一切并最终获得了构建的解决方案,那么你可能会发现你只能将引用添加为UNSAFE引用,这意味着你必须开始更改各种SqlSever权限...

此时你可能会放弃。

我想说的是,这里的工作比原来的答案还要多得多!

答案 3 :(得分:1)

在Sql Server中,像Select 2+2这样的东西会返回4.所以,你可以有一个存储过程从数据库中读取字符串然后构建另一个动态字符串让我们调用它(@SQLString)并运行那个问题。

例如,在这种情况下,公式可以是x + 2,然后根据它建立一个动态字符串,然后调用sp_executesql:

EXEC sp_executesql @SQLString

但是,在走这条路之前,您应该先阅读this article on Dynamic SQL

我相信你做得很好。