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?

Était-ce utile?

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?

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top