0

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

我将拥有大约 5 个左右的 Scalar UDF,接受一些简单的值(例如当前分数、subjectid 等),然后输出一个十进制值。

例如。

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。

那么,在性能方面可以这样做吗?

4

2 回答 2

3

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

马克

于 2009-06-24T07:59:24.903 回答
1

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

于 2010-04-12T12:17:11.867 回答