私の関数は非決定的なものです
-
16-10-2019 - |
質問
2つの機能があります。 fn_without_param と fn_with_param
CREATE FUNCTION [dbo].[fn_Without_Param]
(
)
...
INNER JOIN .. ON .. AND SubmitDate = CONVERT( varchar(10), GETUTCDATE(), 101 )
と
/*
I am requesting it so:
declare @SubmitDate datetime
set @SubmitDate = CONVERT( varchar(10), GETUTCDATE(), 101 )
select * from [dbo].[fn_With_Param] (@SubmitDate)
*/
CREATE FUNCTION [dbo].[fn_With_Param]
(
@SubmitDate datetime
)
...
INNER JOIN .. ON .. AND SubmitDate = @SubmitDate
最初のケースでは、非決定的(?)関数(getutcdateのため)があり、同じ入力パラメーター(varchar(10)、getutcdate()、101) - 時間なしの日付、数分のMeensを持つ2番目の機能を呼び出しました、秒、ミリ秒)。私の関数は非決定的なものですか?これを検出する方法、おそらくSQL Serverにはパブリックマークがあります。なぜ2番目の関数が遅いのですか?
解決
フラグがあるかどうかはわかりませんが、で利用可能な参照があります http://msdn.microsoft.com/en-us/library/ms178091.aspx 内蔵機能は決定論的です。
getDate()およびgetUtcdate()は非決定論的です。なぜなら、同じパラメーターで複数回呼び出すと、この場合は異なる値が得られるためです。言い換えれば、返品値は入力によって決定されません。
2番目が最初のものよりも遅い理由に関しては、submitdate = @submitdate間の暗黙の変換を確認してください。彼らは両方とも日時ですか?
所属していません dba.stackexchange