我正在尝试生成一些用于计算最终得分的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。
那么,关于性能问题可以吗?
答案 0 :(得分:3)
当然,没问题 - 性能几乎与你在每个SELECT中内联时的性能相同。我认为这根本不应该是任何问题 - 恰恰相反,将它放入UDF似乎是一个非常好的主意! (保持T-SQL代码简洁明了)。
马克
答案 1 :(得分:1)
是的,这是一个坏主意,因为您应该将所有分数权重放在表格中并执行联接以获得结果。