0

最終スコアを計算するために使用されるSQLを生成しようとしています->学校の子供たちと年末のスコアを考えてください。

単純な値 (現在のスコア、サブジェクト ID など) を受け取り、10 進数値を吐き出す、約 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 を選択しません。

それで、これはパフォーマンスに関して大丈夫ですか?

4

2 に答える 2

3

もちろん、問題ありません。パフォーマンスは、すべての SELECT でインラインで実行した場合とほぼ同じになります。これはまったく問題にはならないと思います。まったく逆に、これを UDF に入れるのは本当に良い考えのように思えます。(T-SQL コードをクリーンでシンプルに保つため)。

マルク

于 2009-06-24T07:59:24.903 に答える
1

はい、すべてのスコアの重みをテーブルに入れ、結合を実行して結果を取得する必要があるため、それは悪い考えです。

于 2010-04-12T12:17:11.867 に答える