在这种情况下使用Sql Server标量UDF是不是很糟糕?

时间:2009-06-24 07:53:09

标签: sql sql-server user-defined-functions

我正在尝试生成一些用于计算最终得分的sql - >想想孩子在学校和他们年终的分数。

我将有大约5个左右的标量UDF,接受一些简单的值(例如,当前得分,主观,无论如何),然后吐出一个小数值。

例如

CREATE FUNCTION [dbo].[GetRatingModifier]
(
    @ExamScore DECIMAL(6, 2),
    @Project1Score DECIMAL(6, 2),
    @Project1Score DECIMAL(6, 2),
    @Project1Score DECIMAL(6, 2),
    @SubjectTypeId TINYINT
)
RETURNS DECIMAL(8,5)
AS
BEGIN
    DECLARE @Score DECIMAL(8,5)

    SELECT @Score = (CASE @Project1Score
                     WHEN 1 THEN 10
                     WHEN 2 THEN 12.4
                      ....) +
                    (CASE blah.. u get the drift)..
    RETURN @Score
END

逻辑只有数学。没有从表yyy等选择xxx。

那么,关于性能问题可以吗?

2 个答案:

答案 0 :(得分:3)

当然,没问题 - 性能几乎与你在每个SELECT中内联时的性能相同。我认为这根本不应该是任何问题 - 恰恰相反,将它放入UDF似乎是一个非常好的主意! (保持T-SQL代码简洁明了)。

马克

答案 1 :(得分:1)

是的,这是一个坏主意,因为您应该将所有分数权重放在表格中并执行联接以获得结果。