2009-06-24 10 views
0

몇 가지 최종 점수를 계산하는 데 사용되는 일부 sql을 생성하려고합니다.> 학교에서 아이들을 생각하고 연말 점수를 계산합니다.이 시나리오에서 SQL Server Scalar UDF를 사용하는 것이 좋지 않습니까?

저는 약 5 개 정도의 스칼라 UDF를 가지고 간단한 값 (예 : 현재 스코어, subjectid 등)을 받아들이고 10 진수 값을 내뱉습니다.

예 :

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를 선택하지 마십시오.

성능과 관련하여이 작업을 수행해도됩니까?

+0

테스트하는 것이 얼마나 어려운가요? – JeffO

답변

3

물론 모든 문제가 발생할 때마다 인라인 할 때와 거의 동일합니다. 나는 이것이 전혀 문제가되지 않는다고 생각합니다. 꽤 반대로, 이것을 UDF에 넣는 것은 정말 좋은 생각처럼 보입니다! (T-SQL 코드를 깨끗하고 단순하게 유지하기 위해). 당신이 테이블의 모든 점수 가중치를 넣고는 결과를 얻기 위해 가입 수행해야하기 때문에

마크는

+0

그래서 udf는 조심스럽게 select 절에서 고려해야합니다. udf 자체가 테이블 foo 등에서 일부 선택 사항을 수행하고 있다면 .. ?? (나는 오늘 udf에 대해 몇 가지 내용을 읽었는데 성능을 사용하는 것이 좋지 않고 .. TVF를 대신 사용하려고한다.)? –

+0

UDF는 괜찮습니다. 과용하지 마십시오. 나는 그 (것)들을 케이스 .....의 낱단을 한 곳으로 모으기를 위해 좋아한다 - 불필요한 반복을 가진 당신의 부호 튀기기. –

+0

그리고 UDF는 조회와 같은 것들을위한 좋은 선택이 될 수 있습니다 - 단지 그들이하는 일을 알고 있어야합니다! 주의해서 사용하십시오. 그러면 괜찮을 것입니다! –

1

예, 그것은 잘못된 생각이다.

관련 문제