Est-il mauvais d'utiliser une UDF Sql Server Scalar dans ce scénario?
-
10-07-2019 - |
Question
J'essaie de générer du SQL utilisé pour calculer certains scores finaux - > pense que les enfants à l'école et leurs scores de fin d'année.
J'allais avoir environ 5 UDF Scalar acceptant quelques valeurs simples (par exemple, le score actuel, le sujet, etc.), puis une valeur décimale.
par exemple.
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 logique n'a que des maths. Aucune sélection xxx de la table aaaa etc ..
Alors, est-ce que ça va pour la performance?
La solution
Bien sûr, pas de problème - les performances seront presque les mêmes que si vous le faisiez en ligne à chaque SELECT. Je ne pense pas que cela devrait poser problème, bien au contraire, le mettre dans une FDU semble être une très bonne idée! (pour garder votre code T-SQL propre et simple).
Marc
Autres conseils
Oui, c'est une mauvaise idée car vous devez mettre tous vos poids dans un tableau et effectuer une jointure pour obtenir le résultat.