Pregunta

Tengo dos funciones: fn_Without_Param y fn_With_Param

 CREATE FUNCTION [dbo].[fn_Without_Param]
 (
 )
 ...
 INNER JOIN .. ON .. AND SubmitDate = CONVERT( varchar(10), GETUTCDATE(), 101 )

y

/*
     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  

En el primer caso tengo no determinista función (debido a GETUTCDATE) y yo he llamado el segundo con el mismo parámetro de entrada (convert (varchar (10), GETUTCDATE (), 101) (?) - meens fecha de hoy sin horas, minutos, segundos, milisegundos). Es mi función no determinista uno? La forma de detectar esto, tal vez sql server tiene alguna marca público. ¿Por qué es la segunda función más lento?

¿Fue útil?

Solución

No estoy seguro de si hay una bandera, pero hay una referencia disponible en http: / /msdn.microsoft.com/en-us/library/ms178091.aspx de los cuales están construidos en funciones determinista.

GETDATE () y GETUTCDATE () son deterministas porque si usted los llama varias veces con los mismos parámetros, que en este caso los hay, se obtiene valores diferentes. En otras palabras, el valor de retorno no está determinada por entrada.

En cuanto a por qué el segundo es más lento que el primero, de verificación para la conversión implícita entre SubmitDate = @SubmitDate. Son ambos de fecha y hora?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top