Pregunta

Estoy tratando de generar algunos sql que se usan para calcular algunos puntajes finales - > Piense en los niños en la escuela y sus puntajes de fin de año.

Iba a tener alrededor de 5 UDF escalares que aceptaran algunos valores simples (por ejemplo, puntaje actual, subjectid, lo que sea) y luego escupieran un valor decimal.

ej.

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

La lógica solo tiene matemáticas. No seleccione xxx de la tabla yyy, etc.

Entonces, ¿está bien hacer esto con respecto al rendimiento?

¿Fue útil?

Solución

Claro, no hay problema: el rendimiento será casi el mismo que cuando lo haría en línea en cada SELECT. No creo que esto deba ser ningún problema, al contrario, ¡poner esto en un UDF parece una muy buena idea! (para mantener su código T-SQL limpio y simple).

Marc

Otros consejos

Sí, es una mala idea porque debe poner todos sus pesos de puntaje en una tabla y realizar una unión para obtener el resultado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top