我有两个功能: fn_without_paramfn_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),并且我称之为第二个具有相同输入参数的函数(convert(varchar(10),getutcdate(),101),101,101) - 今天没有小时的时间,分钟。 ,秒,毫秒)。我的功能非确定性吗?如何检测到这一点,也许SQL Server具有一些公共标记。为什么第二个功能较慢?

有帮助吗?

解决方案

我不确定是否有标志,但是有参考 http://msdn.microsoft.com/en-us/library/ms178091.aspx 其中内置的功能是确定性的。

getDate()和getutcdate()是无确定的,因为如果您多次将它们称为相同的参数,在这种情况下,您将获得不同的值。换句话说,返回值未通过输入确定。

至于为什么第二个比第一个慢,请检查submitdate = @submitdate之间的隐式转换。他们都是日期时间吗?

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top