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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top