7

さまざまな計算で使用されるスカラー関数を含むselectステートメントがある場合、そのスカラー関数は複数回呼び出されますか?もしそうなら、これを最適化する方法はありますか?私の実際のクエリでは、選択ごとにX 6回、何千回も呼び出されるので、選択ごとに1回だけ関数を呼び出します。

例えば:

SELECT 
[dbo].[fn_Days](@Account) + u.[DayRate],
[dbo].[fn_Days](@Account) / u.[WorkDays]
FROM [dbo].[tblUnit] u

fn_daysが行うのは、作業日数のintを返すことだけです。

4

2 に答える 2

11

はい、スカラーは、コーディングした方法で複数回呼び出されます。それを機能させる1つの方法は、次のようなサブクエリにラップすることです。

SELECT t.[days] + t.[DayRate],
       t.[days] / t.[WorkDays]
FROM (
     SELECT 
     [dbo].[fn_Days](@Account) as days,
     u.[DayRate],
     u.[WorkDays]
     FROM [dbo].[tblUnit] u) as t

このように、fn_Daysは、前述のように2回、または6回ではなく、行ごとに1回だけ呼び出されます。

お役に立てれば。

于 2012-04-13T00:30:24.857 に答える