È la mia funzione uno non deterministico
-
16-10-2019 - |
Domanda
Ho due funzioni: fn_Without_Param e fn_With_Param
CREATE FUNCTION [dbo].[fn_Without_Param]
(
)
...
INNER JOIN .. ON .. AND SubmitDate = CONVERT( varchar(10), GETUTCDATE(), 101 )
e
/*
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
Nel primo caso ho deterministica funzione (a causa della GETUTCDATE) e ho chiamato il secondo con lo stesso parametro di ingresso (CONVERT (varchar (10), GETUTCDATE (), 101) (?) - meens data di oggi, senza ore, minuti, secondi, millisecondi). È la mia funzione non deterministico uno? Come rilevare questo, forse di SQL Server è qualche segno pubblico. Perché è la seconda funzione più lento?
Soluzione
Non sono sicuro se v'è una bandiera, ma v'è un riferimento disponibile presso http: / /msdn.microsoft.com/en-us/library/ms178091.aspx dei quali costruiti in funzioni sono deterministica.
GETDATE () e GETUTCDATE () sono non deterministico perché se li chiami più volte con gli stessi parametri, che in questo caso sono nessuno, si ottiene valori diversi. In altre parole, il valore di ritorno non è determinato ingresso.
Per quanto riguarda il secondo perché è più lenta della prima, controllo per conversione implicita tra SubmitDate = @SubmitDate. Sono entrambi datetime?