2009-06-24 104 views
0

我想要生成一些用于计算一些最终分数的sql - >请考虑孩子在学校和他们的年底分数。在这种情况下使用Sql Server Scalar UDF不好吗?

我将有大约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等。

所以,这关于性能可以吗?

+0

测试有多难? – JeffO 2011-10-21 20:04:54

回答

3

当然,没有问题 - 性能将几乎相同,如果你在每个SELECT中都内联的话。我不认为这应该是什么问题 - 相反,把它放入UDF看起来是一个非常好的主意! (以保持您的T-SQL代码清洁和简单)。

马克

+0

因此,如果udf本身正在从表foo中做一些选择等等,那么udf应该在select子句中谨慎考虑。 (我今天一直在阅读一些关于udf的东西,用re:performance并不是很好,甚至试图用TVF来代替..)? – 2009-06-24 08:10:16

1

是的,这是一个坏主意,因为你应该把你所有的分数权重表并执行联接得到的结果。

相关问题