¿Es malo usar un UDF escalar de servidor SQL en este escenario?
-
10-07-2019 - |
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?
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.