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?

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top