Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

GETUTCDATE() restituirà lo stesso valore se utilizzato due volte nella stessa istruzione?

Grazie ai link forniti da GBn, credo che questo risponda alla mia domanda:

In comune con rand() Viene valutato una volta per colonna ma una volta valutato rimane lo stesso per tutte le righe....guarda le proprietà dell'operatore ComputeScalar nel piano di esecuzione effettivo vedrai che GetDate() viene valutato due volte.

Ho controllato e sembra che ciò avvenga ancora allo stesso modo in SQL Server 2008:GetUtcDate() viene valutato due volte nel piano di esecuzione. Non produrrà risultati diversi per riga, ma è possibile che possa produrre un risultato diverso per colonna se la tempistica fosse corretta.

Modifica

Posso davvero provare questo comportamento! Prova questo:

select GETUTCDATE(), RAND(), RAND(), ...[~3000 RAND()s]..., RAND(), GETUTCDATE()
from [TableOfYourChoice]

Nel mio esperimento, ho finito con 2011-05-17 20:47:34.247 nella prima colonna e 2011-05-17 20:47:34.250 nell'ultima colonna, che mostra una differenza di tre millisecondi come risultato della valutazione di tutti i RAND() s tra la prima e la seconda chiamata a GETUTCDATE().