Разве плохо в этом сценарии использовать Sql Server Scalar UDF? - PullRequest
0 голосов
/ 24 июня 2009

Я пытаюсь создать некоторый sql, который используется для подсчета окончательных оценок -> думаю, что дети в школе и их оценки на конец года.

Я собирался иметь около 5 или около того скалярных UDF, которые принимают несколько простых значений (например, текущий счет, субъектив и т. Д.) И затем выплевывают десятичное значение.

например.

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

В логике есть только математика. Нет выбора ххх из таблицы гггг и т. Д.

Итак, это нормально делать с производительностью?

Ответы [ 2 ]

3 голосов
/ 24 июня 2009

Конечно, нет проблем - производительность будет почти такой же, как если бы вы делали это встроенным на каждом SELECT. Я не думаю, что это должно быть какой-либо проблемой - наоборот, помещать это в UDF кажется действительно хорошей идеей! (чтобы ваш код T-SQL был чистым и простым).

Марк

1 голос
/ 12 апреля 2010

Да, это плохая идея, потому что вы должны поместить все свои веса в таблицу и выполнить объединение, чтобы получить результат.

...