Ist es schlimm, einen SQL-Server Scalar UDF in diesem Szenario zu benutzen?
-
10-07-2019 - |
Frage
Ich versuche, einige SQL zu generieren, die verwendet wird, einige Endergebnisse zu berechnen. -> denke, dass Kinder in der Schule und deren Ende des Jahres Partituren
Ich wollte etwa 5 oder so Scalar UDF haben, dass einige einfache Werte annehmen (z. B. aktuelle Punktzahl, subjectid, was auch immer) und dann einen Dezimalwert ausspucken.
zB.
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
Die Logik hat nur Mathematik. Nein wählen xxx aus der Tabelle yyy etc ..
Also, das ist ok in Bezug auf Leistung zu tun?
Lösung
Klar, kein Problem - Leistung wird fast das gleiche sein wie bei, wenn Sie es bei jedem SELECT Inline tun würden. Ich glaube nicht, das überhaupt kein Problem sein sollte - ganz im Gegenteil, scheint wie eine wirklich gute Idee, diese in ein UDF setzen! (Halten Sie Ihren T-SQL-Code sauber und einfach).
Marc
Andere Tipps
Ja, es ist eine schlechte Idee, weil Sie alle Ihre Punktzahl Gewichte in einer Tabelle setzen sollen, und führen Sie einen Join das Ergebnis zu erhalten.