هل هو سيء لاستخدام UDF مزود خدمة عددي في هذا السيناريو؟
-
10-07-2019 - |
سؤال
وأنا أحاول أن تولد بعض 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 الخاص بك نظيفة وبسيطة).
ومارك
نصائح أخرى
نعم، انها فكرة سيئة لأنك يجب أن تضع كل الأوزان درجاتك في جدول وإجراء الانضمام للحصول على النتيجة.