È male usare un UDF scalare SQL Server in questo scenario?
-
10-07-2019 - |
Domanda
Sto cercando di generare alcuni sql che vengono utilizzati per calcolare alcuni punteggi finali - > pensa ai bambini a scuola e ai loro punteggi di fine anno.
Avrei avuto circa 5 UDF scalari che, accettando alcuni valori semplici (ad es. punteggio attuale, soggetto, qualunque cosa) e poi sputando un valore decimale.
ad es.
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 logica ha solo matematica. Non selezionare xxx dalla tabella yyy ecc.
Quindi, va bene per quanto riguarda le prestazioni?
Soluzione
Certo, nessun problema: le prestazioni saranno quasi le stesse di quando lo faresti in linea ad ogni SELECT. Non penso che questo dovrebbe essere un problema, anzi, metterlo in un UDF sembra davvero una buona idea! (per mantenere il codice T-SQL pulito e semplice).
Marc
Altri suggerimenti
Sì, è una cattiva idea perché dovresti mettere tutti i pesi del tuo punteggio in una tabella ed eseguire un join per ottenere il risultato.