Ma fonction d'un non déterministes
-
16-10-2019 - |
Question
J'ai deux fonctions: fn_Without_Param et fn_With_Param
CREATE FUNCTION [dbo].[fn_Without_Param]
(
)
...
INNER JOIN .. ON .. AND SubmitDate = CONVERT( varchar(10), GETUTCDATE(), 101 )
et
/*
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
Dans le premier cas, j'ai fonction non déterministes (à cause de GETUTCDATE) et je l'ai appelé le second avec le même paramètre d'entrée (CONVERT (varchar (10), GETUTCDATE (), 101) (?) - Meens date d'aujourd'hui sans heures, minutes, secondes, millisecondes). Ma fonction nondéterministe un? Comment détecter ce, peut-être sql server a une marque publique. Pourquoi la deuxième fonction plus lente?
La solution
Je ne sais pas s'il y a un drapeau, mais il y a une référence disponible à http: / /msdn.microsoft.com/en-us/library/ms178091.aspx dont fonctions intégrées sont déterministes.
GETDATE () et GETUTCDATE () sont non déterministes parce que si vous les appelez plusieurs fois avec les mêmes paramètres, qui dans ce cas ne sont pas, vous obtenez des valeurs différentes. En d'autres termes, la valeur de retour est pas déterminée par entrée.
En ce qui concerne la raison pour laquelle le second est plus lent que le premier, pour vérifier la conversion implicite entre SubmitDate = @SubmitDate. Sont-ils tous les deux datetime?