SQL 单精度服务器 SUM 函数

SQL Server SUM function with single precision

我正在转换一个使用单精度值进行计算的旧软件。我的新应用程序是用 C# 编写的,并使用 SQL 服务器。作为此转换的一部分,我确实需要匹配的计算值以证明新系统。

我想使用 SQL 服务器中的 SUM 函数来计算一些值,但是根据 documentation 和观察到的该函数 (SUM) 的行为,结果是使用双精度。

如果我 return 单个值作为我的应用程序的单精度值,然后在 C# 中对它们求和(使用 Single),我的值与旧系统匹配。但在大多数情况下,这样做的开销(所需时间)将难以承受。

所以我的问题是...有没有办法在 SQL 服务器 (2014) 中求和,这将强制单精度值 (real in SQL 服务器) 用于计算?

哦,值的范围从非常大到非常小,所以我认为 DECIMAL(n,m) 行不通。

你可以试试

SUM(CAST(MyColumn as real))

SUM returns 基列为实数时浮动,但数字可能与旧系统相同。

您可以编写和部署自己的 "SUM" 聚合函数,计算总和的代码将使用 C#。查看 CLR User-Defined Aggregates

[Serializable]
[Microsoft.SqlServer.Server.SqlUserDefinedAggregate(
    Format.Native,
    IsInvariantToDuplicates = false,
    IsInvariantToNulls = true,
    IsInvariantToOrder = true,
    IsNullIfEmpty = true,
    Name = "SumReal")]
public struct SumReal
{
    private Single sum;

    public void Init()
    {
        sum = 0;
    }

    public void Accumulate(SqlSingle Value)
    {
        if (!Value.IsNull)
        {
            sum += (Single)Value;
        }
    }

    public void Merge(SumReal Group)
    {
        sum += (Single)Group.sum;
    }

    public SqlSingle Terminate()
    {
        // Put your code here
        return sum;
    }
}