이 시나리오에서 SQL Server Scalar UDF를 사용하는 것이 좋지 않습니까?
-
10-07-2019 - |
문제
나는 최종 점수를 계산하는 데 사용되는 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
논리에는 수학 만 있습니다. 테이블 yyy 등에서 xxx를 선택하지 않음 ..
그렇다면 이것이 공연과 관련하여 괜찮습니까?
해결책
물론, 문제 없음 - 성능은 모든 선택마다 인라인을 할 때와 거의 동일합니다. 나는 이것이 전혀 문제가 될 것이라고 생각하지 않습니다. 반대로 UDF에 넣는 것은 정말 좋은 생각처럼 보입니다! (T-SQL 코드를 깨끗하고 간단하게 유지하려면).
마크
다른 팁
예, 모든 점수 가중치를 테이블에 넣고 결과를 얻기 위해 가입을 수행해야하기 때문에 나쁜 생각입니다.
제휴하지 않습니다 StackOverflow