Моя функция не сдержанна
-
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) и я позвонил второму с одним и тем же входным параметром (преобразовать (varchar (10), getUtcdate (), 101) - Meens Today Date без часов, минуты. , секунды, миллисекунд). Моя функция не сдержанна? Как это обнаружить, возможно, SQL Server имеет некоторую общедоступную оценку. Почему вторая функция медленнее?
Решение
Я не уверен, есть ли флаг, но есть ссылка на http://msdn.microsoft.com/en-us/library/ms178091.aspx из которых встроенные функции являются детерминированными.
GetDate () и getUtcdate () являются нетерминированными, потому что, если вы называете их несколько раз с одинаковыми параметрами, которые в данном случае не являются, вы получаете разные значения. Другими словами, возвращаемое значение не определяется входным.
Что касается того, почему второе медленнее, чем первое, проверьте неявное преобразование между отправкой date = @submitdate. Они оба DateTime?