هل هو سيء لاستخدام UDF مزود خدمة عددي في هذا السيناريو؟

StackOverflow https://stackoverflow.com/questions/1036970

سؤال

وأنا أحاول أن تولد بعض SQL التي يتم استخدامها لحساب بعض الدرجات النهائية -> أعتقد أن الأطفال في المدرسة ونهايتهم عشرات السنة

وكنت ذاهبا لدينا حوالي 5 أو عددي ذلك في UDF أن قبول بعض القيم بسيطة (مثل تيار النتيجة، subjectid، أيا كان) ومن ثم بصق قيمة عشرية.

وعلى سبيل المثال.

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

والمنطق ديه الرياضيات فقط. لا حدد الثلاثون من الجدول YYY الخ ..

وهكذا، وهذا هو موافق على القيام فيما يتعلق الأداء؟

هل كانت مفيدة؟

المحلول

وبالتأكيد، لا مشكلة - سوف يكون الأداء نفسه تقريبا كما لو كنت تفعل عندما كان يتمشى في كل SELECT. أنا لا أعتقد أن هذا يجب أن يكون أي مشكلة على الإطلاق - بل على العكس تماما، ووضع هذا إلى UDF تبدو فكرة جيدة حقا! (للحفاظ على كود T-SQL الخاص بك نظيفة وبسيطة).

ومارك

نصائح أخرى

نعم، انها فكرة سيئة لأنك يجب أن تضع كل الأوزان درجاتك في جدول وإجراء الانضمام للحصول على النتيجة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top