-
16-10-2019 - |
题
我有两个功能: 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),并且我称之为第二个具有相同输入参数的函数(convert(varchar(10),getutcdate(),101),101,101) - 今天没有小时的时间,分钟。 ,秒,毫秒)。我的功能非确定性吗?如何检测到这一点,也许SQL Server具有一些公共标记。为什么第二个功能较慢?
解决方案
我不确定是否有标志,但是有参考 http://msdn.microsoft.com/en-us/library/ms178091.aspx 其中内置的功能是确定性的。
getDate()和getutcdate()是无确定的,因为如果您多次将它们称为相同的参数,在这种情况下,您将获得不同的值。换句话说,返回值未通过输入确定。
至于为什么第二个比第一个慢,请检查submitdate = @submitdate之间的隐式转换。他们都是日期时间吗?
不隶属于 dba.stackexchange