Вопрос

У меня две функции: 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?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top